{
  "contractName": "FuseStakingV3",
  "abi": [
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "currentDay",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "ubi",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "communityPool",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "gdBought",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "stakingRewards",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "pendingFuseEarnings",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "keeper",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "keeperGDFee",
          "type": "uint256"
        }
      ],
      "name": "UBICollected",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "GD",
      "outputs": [
        {
          "internalType": "contract GoodDollar",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "RATIO_BASE",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "x",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "y",
          "type": "uint256"
        }
      ],
      "name": "add",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "z",
          "type": "uint256"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "communityPoolRatio",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "consensus",
      "outputs": [
        {
          "internalType": "contract IConsensus",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "int256",
          "name": "x",
          "type": "int256"
        },
        {
          "internalType": "int256",
          "name": "y",
          "type": "int256"
        }
      ],
      "name": "imax",
      "outputs": [
        {
          "internalType": "int256",
          "name": "z",
          "type": "int256"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "int256",
          "name": "x",
          "type": "int256"
        },
        {
          "internalType": "int256",
          "name": "y",
          "type": "int256"
        }
      ],
      "name": "imin",
      "outputs": [
        {
          "internalType": "int256",
          "name": "z",
          "type": "int256"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "keeperFeeRatio",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "lastDayCollected",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "x",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "y",
          "type": "uint256"
        }
      ],
      "name": "max",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "z",
          "type": "uint256"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "maxSlippageRatio",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "x",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "y",
          "type": "uint256"
        }
      ],
      "name": "min",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "z",
          "type": "uint256"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "x",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "y",
          "type": "uint256"
        }
      ],
      "name": "mul",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "z",
          "type": "uint256"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "x",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "y",
          "type": "uint256"
        }
      ],
      "name": "rdiv",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "z",
          "type": "uint256"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "x",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "y",
          "type": "uint256"
        }
      ],
      "name": "rmul",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "z",
          "type": "uint256"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "x",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "n",
          "type": "uint256"
        }
      ],
      "name": "rpow",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "z",
          "type": "uint256"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "stakeBackRatio",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "stakers",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "x",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "y",
          "type": "uint256"
        }
      ],
      "name": "sub",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "z",
          "type": "uint256"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "ubischeme",
      "outputs": [
        {
          "internalType": "contract UBIScheme",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "uniswap",
      "outputs": [
        {
          "internalType": "contract Uniswap",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "uniswapFactory",
      "outputs": [
        {
          "internalType": "contract UniswapFactory",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "uniswapPair",
      "outputs": [
        {
          "internalType": "contract UniswapPair",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "validators",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "x",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "y",
          "type": "uint256"
        }
      ],
      "name": "wdiv",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "z",
          "type": "uint256"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "x",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "y",
          "type": "uint256"
        }
      ],
      "name": "wmul",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "z",
          "type": "uint256"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "stateMutability": "payable",
      "type": "receive"
    },
    {
      "inputs": [],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "upgrade0",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_gd",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_ubischeme",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_uniswap",
          "type": "address"
        }
      ],
      "name": "upgrade1",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "stake",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_validator",
          "type": "address"
        }
      ],
      "name": "stake",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_owner",
          "type": "address"
        }
      ],
      "name": "balanceOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_value",
          "type": "uint256"
        }
      ],
      "name": "withdraw",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_v",
          "type": "address"
        }
      ],
      "name": "addValidator",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "totalDelegated",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_validator",
          "type": "address"
        }
      ],
      "name": "removeValidator",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "collectUBIInterest",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_value",
          "type": "uint256"
        }
      ],
      "name": "calcMaxFuseWithSlippage",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "r_fuse",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "r_gd",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_value",
          "type": "uint256"
        }
      ],
      "name": "calcMaxFuseWithSlippage",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.6.12+commit.27d51765\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"currentDay\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"ubi\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"communityPool\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"gdBought\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"stakingRewards\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"pendingFuseEarnings\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"keeper\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"keeperGDFee\",\"type\":\"uint256\"}],\"name\":\"UBICollected\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"GD\",\"outputs\":[{\"internalType\":\"contract GoodDollar\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"RATIO_BASE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"y\",\"type\":\"uint256\"}],\"name\":\"add\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"z\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_v\",\"type\":\"address\"}],\"name\":\"addValidator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"r_fuse\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"r_gd\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"calcMaxFuseWithSlippage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"calcMaxFuseWithSlippage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"collectUBIInterest\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"communityPoolRatio\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"consensus\",\"outputs\":[{\"internalType\":\"contract IConsensus\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"x\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"y\",\"type\":\"int256\"}],\"name\":\"imax\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"z\",\"type\":\"int256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"x\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"y\",\"type\":\"int256\"}],\"name\":\"imin\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"z\",\"type\":\"int256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"keeperFeeRatio\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastDayCollected\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"y\",\"type\":\"uint256\"}],\"name\":\"max\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"z\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxSlippageRatio\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"y\",\"type\":\"uint256\"}],\"name\":\"min\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"z\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"y\",\"type\":\"uint256\"}],\"name\":\"mul\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"z\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"y\",\"type\":\"uint256\"}],\"name\":\"rdiv\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"z\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_validator\",\"type\":\"address\"}],\"name\":\"removeValidator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"y\",\"type\":\"uint256\"}],\"name\":\"rmul\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"z\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"n\",\"type\":\"uint256\"}],\"name\":\"rpow\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"z\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_validator\",\"type\":\"address\"}],\"name\":\"stake\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stake\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stakeBackRatio\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"stakers\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"y\",\"type\":\"uint256\"}],\"name\":\"sub\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"z\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalDelegated\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ubischeme\",\"outputs\":[{\"internalType\":\"contract UBIScheme\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"uniswap\",\"outputs\":[{\"internalType\":\"contract Uniswap\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"uniswapFactory\",\"outputs\":[{\"internalType\":\"contract UniswapFactory\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"uniswapPair\",\"outputs\":[{\"internalType\":\"contract UniswapPair\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"upgrade0\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_gd\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_ubischeme\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_uniswap\",\"type\":\"address\"}],\"name\":\"upgrade1\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"validators\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"y\",\"type\":\"uint256\"}],\"name\":\"wdiv\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"z\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"withdraw\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"y\",\"type\":\"uint256\"}],\"name\":\"wmul\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"z\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"calcMaxFuseWithSlippage(uint256,uint256,uint256)\":{\"details\":\"use binary search to find quantity that will result with slippage < maxSlippageRatio\"},\"initialize()\":{\"details\":\"initialize\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/upgradables/contracts/staking/FuseStakingV3.sol\":\"FuseStakingV3\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/upgradables/contracts/Interfaces.sol\":{\"keccak256\":\"0xe501727b0e5e15fe639129ab4b1abc59a14ebd3ddd05bb7056ac4fc26a8f3ee7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://90d8797740cfd3933ae849f3144e30f9133a55b26634b3efefa8206cd91f62d8\",\"dweb:/ipfs/QmYLeetoyiPej9acnGzjLLwgVnEg4d2Eg1Xb4k3A1mJqj6\"]},\"/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/upgradables/contracts/staking/FuseStakingV3.sol\":{\"keccak256\":\"0x499a7548bed80359f337b487318cb2fa04f5ba0fd2c6776b8beabf6349f04997\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2a1a9e5394281cf86fef8bcd6e88193de1d8b86c3dafc506994f271c1e3314d1\",\"dweb:/ipfs/QmUYRzxjhSY9Yd2BRuqHMNMxBtzsZDASBPxXxZa33L8jMC\"]},\"/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/upgradables/contracts/utils/DSMath.sol\":{\"keccak256\":\"0x064e3a362de2b979b6afd9d9b00ef9682b61d3a2560f53a18535c36e5dacf57d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d86b2691be131202255756be3509685b4b00b65469577caba7d90d0a54be47f6\",\"dweb:/ipfs/QmP2MBv2YTd257qSv6TJmxmSwTcP4zDC3M51TjmL8Mv7xQ\"]},\"@openzeppelin/contracts-upgradeable/GSN/ContextUpgradeable.sol\":{\"keccak256\":\"0xbbf8a21b9a66c48d45ff771b8563c6df19ba451d63dfb8380a865c1e1f29d1a0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://062688aac76e27ab50157a9d645700cf92e3c0d51d3d860be1d2e1a0c04a87d0\",\"dweb:/ipfs/QmfXxppWAiSTeH8YNn2EtMPDgzrLeJ5rjRq8knEbje88mX\"]},\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"keccak256\":\"0xe422bf8bc61fe71acb27de4631400cdbb9b532df4de4f255eab093ac356f9745\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7c2e5ed663c9df8fd44b624cfef92a703803cc72cf356c96e69a6e88c5ce082d\",\"dweb:/ipfs/QmdtPLYhopn3L14o6TCJkwH28o91do8JriAxpFYt67NWGB\"]},\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\":{\"keccak256\":\"0xe9ecc18d06bcc5aa48c40a98333540248b6c1c18ecb6262329c06d3f0cbb45ae\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8a81bcbe4f867a4eaf7ec375508a9901ea7517b9854c9a542c242050beda5127\",\"dweb:/ipfs/QmS499VRDhAgMg1pK96PiyRpP3gJZzzMcoNBbe8AV3JNw3\"]},\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\":{\"keccak256\":\"0xae7044b7c89ed74327b0979ae6f317c65d87b8d17a42d0c62d698d77d5de5511\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d676c978d8ecee5c4510f045b747d94f3a1381e39feb870d2675d5b6d45a371b\",\"dweb:/ipfs/QmUAokuHWPVAf14QkhPtSdYFyNa8HVje9CBEzwCcxH3xkP\"]}},\"version\":1}",
  "bytecode": "0x608060405234801561001057600080fd5b506128ed806100206000396000f3fe6080604052600436106102555760003560e01c8063771602f7116101395780638f907195116100b6578063c11a56301161007a578063c11a563014610649578063c816841b1461065e578063c8a4ac9c14610673578063c8e6c7d914610693578063d22e9b06146106b3578063f2fde38b146106c85761025c565b80638f907195146105b45780639168ae72146105d4578063a5a90636146105f4578063ae94e44814610609578063b67d77c5146106295761025c565b80638918c4a2116100fd5780638918c4a2146105405780638b9af5c1146105555780638bdb2afa146105755780638da5cb5b1461058a5780638ef3f7611461059f5761025c565b8063771602f7146104c15780637ae2b5c7146104e157806380d04de81461050157806381028f67146105165780638129fc1c1461052b5761025c565b80633fb1ccf1116101d25780636021a9d5116101965780636021a9d5146104225780636711281c14610437578063674570221461044c5780636d5433e61461046c57806370a082311461048c578063715018a6146104ac5761025c565b80633fb1ccf11461038b57806340a141ff146103a057806347a1671a146103c25780634d238c8e146103e25780635fde731c146104025761025c565b80632681f7e4116102195780632681f7e4146103015780632cda8943146103235780632e1a7d4d1461034357806335aa2e44146103635780633a4b66f1146103835761025c565b806304d26ebf1461026157806309b6afb21461028c5780630e2286d3146102ac578063150d7e47146102cc57806326476204146102e15761025c565b3661025c57005b600080fd5b34801561026d57600080fd5b506102766106e8565b604051610283919061235d565b60405180910390f35b34801561029857600080fd5b506102766102a73660046122e0565b6106ee565b3480156102b857600080fd5b506102766102c7366004612246565b61080a565b3480156102d857600080fd5b50610276610835565b6102f46102ef36600461210f565b61083b565b6040516102839190612352565b34801561030d57600080fd5b50610316610958565b604051610283919061230b565b34801561032f57600080fd5b5061027661033e3660046122b0565b610967565b34801561034f57600080fd5b5061027661035e3660046122b0565b610a1c565b34801561036f57600080fd5b5061031661037e3660046122b0565b610c7c565b6102f4610ca3565b34801561039757600080fd5b50610316610cb5565b3480156103ac57600080fd5b506103c06103bb36600461210f565b610cc4565b005b3480156103ce57600080fd5b506103c06103dd366004612147565b610ea7565b3480156103ee57600080fd5b506103c06103fd36600461210f565b6110bf565b34801561040e57600080fd5b5061027661041d366004612246565b611146565b34801561042e57600080fd5b50610276611158565b34801561044357600080fd5b506103c061115e565b34801561045857600080fd5b50610276610467366004612246565b611185565b34801561047857600080fd5b50610276610487366004612246565b6111ad565b34801561049857600080fd5b506102766104a736600461210f565b6111c8565b3480156104b857600080fd5b506103c06111e3565b3480156104cd57600080fd5b506102766104dc366004612246565b611262565b3480156104ed57600080fd5b506102766104fc366004612246565b611285565b34801561050d57600080fd5b50610276611295565b34801561052257600080fd5b5061031661136f565b34801561053757600080fd5b506103c061137e565b34801561054c57600080fd5b50610276611480565b34801561056157600080fd5b50610276610570366004612246565b611486565b34801561058157600080fd5b506103166114a7565b34801561059657600080fd5b506103166114b6565b3480156105ab57600080fd5b506103166114c5565b3480156105c057600080fd5b506102766105cf366004612246565b6114d4565b3480156105e057600080fd5b506102766105ef36600461210f565b611529565b34801561060057600080fd5b506103c061153b565b34801561061557600080fd5b50610276610624366004612246565b611876565b34801561063557600080fd5b50610276610644366004612246565b611886565b34801561065557600080fd5b506102766118a9565b34801561066a57600080fd5b506103166118af565b34801561067f57600080fd5b5061027661068e366004612246565b6118be565b34801561069f57600080fd5b506102766106ae366004612246565b6118f5565b3480156106bf57600080fd5b50610276611905565b3480156106d457600080fd5b506103c06106e336600461210f565b61190b565b606f5481565b6000808061070484670de0b6b3a76400006119c2565b9050600085610714606489611a04565b8161071b57fe5b049050600061074d607154610747610740606f54607154611a3e90919063ffffffff16565b8590611a04565b906119c2565b9050855b8385116107fe57600061077b6002610747670de0b6b3a76400006107758a8a611a3e565b90611a04565b90508061078857506107fe565b6000610795828c8c611a63565b905060006107b6633b9aca00610747856102c786662386f26fc10000611a04565b90508481116107de576107d183670de0b6b3a76400006119c2565b60010197508293506107f6565b60016107f284670de0b6b3a76400006119c2565b0396505b505050610751565b98975050505050505050565b60008161082661081c8561068e611ab1565b6002855b04611262565b8161082d57fe5b049392505050565b60705481565b60008034116108655760405162461bcd60e51b815260040161085c906126d0565b60405180910390fd5b6066546108845760405162461bcd60e51b815260040161085c906126fb565b6000805b6001600160a01b038416158015906108a1575060665481105b156108e857836001600160a01b0316606682815481106108bd57fe5b6000918252602090912001546001600160a01b0316146108e057600191506108e8565b600101610888565b506001600160a01b03831615806108fc5750805b6109185760405162461bcd60e51b815260040161085c9061272b565b60006109243485611ac1565b336000908152606560205260409020549091506109419034611a3e565b336000908152606560205260409020559392505050565b6068546001600160a01b031681565b6000806000606c60009054906101000a90046001600160a01b03166001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b1580156109ba57600080fd5b505afa1580156109ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109f29190612267565b506001600160701b031691506001600160701b03169150610a148282866106ee565b949350505050565b600080610a27611d12565b905060008315610a375783610a48565b336000908152606560205260409020545b9050808015801590610a695750336000908152606560205260409020548211155b610a855760405162461bcd60e51b815260040161085c90612664565b606654600090610a969087906119c2565b905060005b606654811015610bf257606754606680546000926001600160a01b0316916321429e609130919086908110610acc57fe5b6000918252602090912001546040516001600160e01b031960e085901b168152610b0392916001600160a01b03169060040161231f565b60206040518083038186803b158015610b1b57600080fd5b505afa158015610b2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b5391906122c8565b905080610b605750610bea565b828111610ba457610b9260668381548110610b7757fe5b6000918252602090912001546001600160a01b031682611d17565b50610b9d8482611dd8565b9350610bdd565b610bcf60668381548110610bb457fe5b6000918252602090912001546001600160a01b031684611d17565b50610bda8484611dd8565b93505b83610be85750610bf2565b505b600101610a9b565b50610c0584610bff611d12565b90611dd8565b935083831115610c13578392505b33600090815260656020526040902054610c2d9084611dd8565b336000908152606560205260409020558215610c7257604051339084156108fc029085906000818181858888f19350505050158015610c70573d6000803e3d6000fd5b505b5090949350505050565b60668181548110610c8957fe5b6000918252602090912001546001600160a01b0316905081565b6000610caf600061083b565b90505b90565b6069546001600160a01b031681565b610ccc611e1a565b6033546001600160a01b03908116911614610cf95760405162461bcd60e51b815260040161085c9061269b565b60675460405163010a14f360e51b81526000916001600160a01b0316906321429e6090610d2c903090869060040161231f565b60206040518083038186803b158015610d4457600080fd5b505afa158015610d58573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d7c91906122c8565b90508015610db3576000610d8e611d12565b9050610d9a8383611d17565b5080610da4611d12565b1415610db1575050610ea4565b505b60005b606654811015610ea157826001600160a01b031660668281548110610dd757fe5b6000918252602090912001546001600160a01b03161415610e995760665460001901811015610e6757606680546000198101908110610e1257fe5b600091825260209091200154606680546001600160a01b039092169183908110610e3857fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055505b6066805480610e7257fe5b600082815260209020810160001990810180546001600160a01b0319169055019055610ea1565b600101610db6565b50505b50565b606c546001600160a01b0316610ea1576001600160a01b03811615610ecc5780610ee2565b73fb76e9e7d88e308ab530330ed90e84a9525703195b606880546001600160a01b03199081166001600160a01b039384161791829055606980548216878516179055606a80549091168584161790556040805163c45a015560e01b81529051919092169163c45a0155916004808301926020929190829003018186803b158015610f5557600080fd5b505afa158015610f69573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f8d919061212b565b606b80546001600160a01b0319166001600160a01b039283161790819055606854604080516315ab88c960e31b815290519284169363e6a439059392169163ad5c464891600480820192602092909190829003018186803b158015610ff157600080fd5b505afa158015611005573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611029919061212b565b856040518363ffffffff1660e01b815260040161104792919061231f565b60206040518083038186803b15801561105f57600080fd5b505afa158015611073573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611097919061212b565b606c80546001600160a01b0319166001600160a01b0392909216919091179055610ea161115e565b6110c7611e1a565b6033546001600160a01b039081169116146110f45760405162461bcd60e51b815260040161085c9061269b565b606680546001810182556000919091527f46501879b8ca8525e8c2fd519e2fbfcfa2ebea26501294aa02cbfcfb12e943540180546001600160a01b0319166001600160a01b0392909216919091179055565b60008161082661081c8561068e611e1e565b606e5481565b60715461118357618235606e819055607255610bb8606f55601e607055620186a06071555b565b600061118f611ab1565b61082661119c85856118be565b60026111a6611ab1565b8161082057fe5b6000818310156111bd57816111bf565b825b90505b92915050565b6001600160a01b031660009081526065602052604090205490565b6111eb611e1a565b6033546001600160a01b039081169116146112185760405162461bcd60e51b815260040161085c9061269b565b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b808201828110156111c25760405162461bcd60e51b815260040161085c90612533565b6000818311156111bd57816111bf565b600080805b60665481101561136957606754606680546000926001600160a01b0316916321429e6091309190869081106112cb57fe5b6000918252602090912001546040516001600160e01b031960e085901b16815261130292916001600160a01b03169060040161231f565b60206040518083038186803b15801561131a57600080fd5b505afa15801561132e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061135291906122c8565b905061135e8382611a3e565b92505060010161129a565b50905090565b606a546001600160a01b031681565b600054610100900460ff16806113975750611397611e2a565b806113a5575060005460ff16155b6113c15760405162461bcd60e51b815260040161085c90612591565b600054610100900460ff161580156113ec576000805460ff1961ff0019909116610100171660011790555b6113f4611e30565b606780546001600160a01b0319908116733014ca10b91cb3d0ad85fef7a3cb95bcac9c0f7917909155606680546001810182556000919091527f46501879b8ca8525e8c2fd519e2fbfcfa2ebea26501294aa02cbfcfb12e9435401805490911673cb876a393f05a6677a8a029f1c6d7603b416c0a61790558015610ea4576000805461ff001916905550565b606d5481565b6000611490611e1e565b61082661149d85856118be565b60026111a6611e1e565b606b546001600160a01b031681565b6033546001600160a01b031690565b6067546001600160a01b031681565b6000600282066114eb576114e6611ab1565b6114ed565b825b90506002820491505b81156111c2576115068384611185565b9250600282061561151e5761151b8184611185565b90505b6002820491506114f6565b60656020526000908152604090205481565b606a5460408051635c9302c960e01b815290516000926001600160a01b031691635c9302c9916004808301926020929190829003018186803b15801561158057600080fd5b505afa158015611594573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115b891906122c8565b9050606d548114156115dc5760405162461bcd60e51b815260040161085c906125df565b60006074546115e9611d12565b03905060008160745401116116105760405162461bcd60e51b815260040161085c90612561565b606d829055607154606e5460009161162f916107479085908303611a04565b905060008183039050606061165761165260745485611a3e90919063ffffffff16565b611f0a565b90506116868160008151811061166957fe5b6020026020010151610bff60745486611a3e90919063ffffffff16565b607455611694826000611ac1565b506000816001815181106116a457fe5b6020026020010151905060006116cb60715461074760705485611a0490919063ffffffff16565b905080156117595760695460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb906117059033908590600401612339565b602060405180830381600087803b15801561171f57600080fd5b505af1158015611733573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117579190612226565b505b600061177a6071546107476072546107758688611dd890919063ffffffff16565b905060006117888483611dd8565b606954606a5460405163a9059cbb60e01b81529293506001600160a01b039182169263a9059cbb926117c09216908590600401612339565b602060405180830381600087803b1580156117da57600080fd5b505af11580156117ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118129190612226565b506073546118209083611a3e565b6073556074546040518a917f49a079c90e07ed02ae8283e86eaeb643c637381d30aa7ba06d155e5b744a85439161186391859187918a918f919033908c90612762565b60405180910390a2505050505050505050565b6000818312156111bd57816111bf565b808203828111156111c25760405162461bcd60e51b815260040161085c90612422565b60715481565b606c546001600160a01b031681565b60008115806118d9575050808202828282816118d657fe5b04145b6111c25760405162461bcd60e51b815260040161085c906124ce565b6000818313156111bd57816111bf565b60725481565b611913611e1a565b6033546001600160a01b039081169116146119405760405162461bcd60e51b815260040161085c9061269b565b6001600160a01b0381166119665760405162461bcd60e51b815260040161085c90612488565b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b60006111bf83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506120ac565b600082611a13575060006111c2565b82820282848281611a2057fe5b04146111bf5760405162461bcd60e51b815260040161085c90612623565b6000828201838110156111bf5760405162461bcd60e51b815260040161085c906124fc565b600080611a72856103e5611a04565b90506000611a808285611a04565b90506000611a9a83611a94886103e8611a04565b90611a3e565b9050808281611aa557fe5b04979650505050505050565b6b033b2e3c9fd0803ce800000090565b606654600090611ad3575060006111c2565b6001600160a01b03821615611b4f576067546040516317066a5760e21b81526001600160a01b0390911690635c19a95c908590611b1490869060040161230b565b6000604051808303818588803b158015611b2d57600080fd5b505af1158015611b41573d6000803e3d6000fd5b5050505050600190506111c2565b606654600090611b659061074786611a94611295565b90508360005b60665481108015611b7c5750600082115b15611d0657606754606680546000926001600160a01b0316916321429e609130919086908110611ba857fe5b6000918252602090912001546040516001600160e01b031960e085901b168152611bdf92916001600160a01b03169060040161231f565b60206040518083038186803b158015611bf757600080fd5b505afa158015611c0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c2f91906122c8565b905083811015611cfd576000611c458583611dd8565b9050838110611c545783611c56565b805b606754606680549293506001600160a01b0390911691635c19a95c91849187908110611c7e57fe5b6000918252602090912001546040516001600160e01b031960e085901b168152611cb4916001600160a01b03169060040161230b565b6000604051808303818588803b158015611ccd57600080fd5b505af1158015611ce1573d6000803e3d6000fd5b5050505050611cf98185611dd890919063ffffffff16565b9350505b50600101611b6b565b50600195945050505050565b303190565b60675460405163f3fef3a360e01b81526000916001600160a01b03169063f3fef3a390611d4a9086908690600401612339565b600060405180830381600087803b158015611d6457600080fd5b505af1925050508015611d75575060015b611dd057611d816127e8565b80611d8c5750611d96565b60009150506111c2565b3d808015611dc0576040519150601f19603f3d011682016040523d82523d6000602084013e611dc5565b606091505b5060009150506111c2565b5060016111c2565b60006111bf83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506120e3565b3390565b670de0b6b3a764000090565b303b1590565b600054610100900460ff1680611e495750611e49611e2a565b80611e57575060005460ff16155b611e735760405162461bcd60e51b815260040161085c90612591565b600054610100900460ff16158015611e9e576000805460ff1961ff0019909116610100171660011790555b6000611ea8611e1a565b603380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3508015610ea4576000805461ff001916905550565b606060008211611f2c5760405162461bcd60e51b815260040161085c90612451565b6000611f3783610967565b604080516002808252606080830184529394509091602083019080368337505060695482519293506001600160a01b0316918391506001908110611f7757fe5b6001600160a01b03928316602091820292909201810191909152606854604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015611fcb57600080fd5b505afa158015611fdf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612003919061212b565b8160008151811061201057fe5b6001600160a01b039283166020918202929092010152606854604051637ff36ab560e01b8152911690637ff36ab590849061205690600090869030904290600401612366565b6000604051808303818588803b15801561206f57600080fd5b505af1158015612083573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f19168201604052610a149190810190612191565b600081836120cd5760405162461bcd60e51b815260040161085c91906123cf565b5060008385816120d957fe5b0495945050505050565b600081848411156121075760405162461bcd60e51b815260040161085c91906123cf565b505050900390565b600060208284031215612120578081fd5b81356111bf8161288d565b60006020828403121561213c578081fd5b81516111bf8161288d565b60008060006060848603121561215b578182fd5b83356121668161288d565b925060208401356121768161288d565b915060408401356121868161288d565b809150509250925092565b600060208083850312156121a3578182fd5b825167ffffffffffffffff8111156121b9578283fd5b8301601f810185136121c9578283fd5b80516121dc6121d7826127c2565b61279b565b81815283810190838501858402850186018910156121f8578687fd5b8694505b8385101561221a5780518352600194909401939185019185016121fc565b50979650505050505050565b600060208284031215612237578081fd5b815180151581146111bf578182fd5b60008060408385031215612258578182fd5b50508035926020909101359150565b60008060006060848603121561227b578283fd5b8351612286816128a2565b6020850151909350612297816128a2565b604085015190925063ffffffff81168114612186578182fd5b6000602082840312156122c1578081fd5b5035919050565b6000602082840312156122d9578081fd5b5051919050565b6000806000606084860312156122f4578283fd5b505081359360208301359350604090920135919050565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b90815260200190565b600060808201868352602060808185015281875180845260a0860191508289019350845b818110156123af5784516001600160a01b03168352938301939183019160010161238a565b50506001600160a01b039690961660408501525050506060015292915050565b6000602080835283518082850152825b818110156123fb578581018301518582016040015282016123df565b8181111561240c5783604083870101525b50601f01601f1916929092016040019392505050565b60208082526015908201527464732d6d6174682d7375622d756e646572666c6f7760581b604082015260600190565b60208082526017908201527f6275792076616c75652073686f756c64206265203e2030000000000000000000604082015260600190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b60208082526014908201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604082015260600190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b60208082526014908201527364732d6d6174682d6164642d6f766572666c6f7760601b604082015260600190565b6020808252601690820152751b9bc819585c9b9a5b99dcc81d1bc818dbdb1b1958dd60521b604082015260600190565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b60208082526024908201527f63616e20636f6c6c656374206f6e6c79206f6e636520696e206120756269206360408201526379636c6560e01b606082015260800190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b60208082526017908201527f696e76616c696420776974686472617720616d6f756e74000000000000000000604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526011908201527007374616b65206d757374206265203e203607c1b604082015260600190565b6020808252601690820152756e6f20617070726f7665642076616c696461746f727360501b604082015260600190565b6020808252601e908201527f76616c696461746f72206e6f7420696e20617070726f766564206c6973740000604082015260600190565b96875260208701959095526040860193909352606085019190915260808401526001600160a01b031660a083015260c082015260e00190565b60405181810167ffffffffffffffff811182821017156127ba57600080fd5b604052919050565b600067ffffffffffffffff8211156127d8578081fd5b5060209081020190565b60e01c90565b600060443d10156127f857610cb2565b600481823e6308c379a061280c82516127e2565b1461281657610cb2565b6040513d600319016004823e80513d67ffffffffffffffff81602484011181841117156128465750505050610cb2565b828401925082519150808211156128605750505050610cb2565b503d8301602082840101111561287857505050610cb2565b601f01601f1916810160200160405291505090565b6001600160a01b0381168114610ea457600080fd5b6001600160701b0381168114610ea457600080fdfea2646970667358221220081add81e96a5a379f92561dd638f8b24a9c3a81ace89f8e1caf531069db6e4564736f6c634300060c0033",
  "deployedBytecode": "0x6080604052600436106102555760003560e01c8063771602f7116101395780638f907195116100b6578063c11a56301161007a578063c11a563014610649578063c816841b1461065e578063c8a4ac9c14610673578063c8e6c7d914610693578063d22e9b06146106b3578063f2fde38b146106c85761025c565b80638f907195146105b45780639168ae72146105d4578063a5a90636146105f4578063ae94e44814610609578063b67d77c5146106295761025c565b80638918c4a2116100fd5780638918c4a2146105405780638b9af5c1146105555780638bdb2afa146105755780638da5cb5b1461058a5780638ef3f7611461059f5761025c565b8063771602f7146104c15780637ae2b5c7146104e157806380d04de81461050157806381028f67146105165780638129fc1c1461052b5761025c565b80633fb1ccf1116101d25780636021a9d5116101965780636021a9d5146104225780636711281c14610437578063674570221461044c5780636d5433e61461046c57806370a082311461048c578063715018a6146104ac5761025c565b80633fb1ccf11461038b57806340a141ff146103a057806347a1671a146103c25780634d238c8e146103e25780635fde731c146104025761025c565b80632681f7e4116102195780632681f7e4146103015780632cda8943146103235780632e1a7d4d1461034357806335aa2e44146103635780633a4b66f1146103835761025c565b806304d26ebf1461026157806309b6afb21461028c5780630e2286d3146102ac578063150d7e47146102cc57806326476204146102e15761025c565b3661025c57005b600080fd5b34801561026d57600080fd5b506102766106e8565b604051610283919061235d565b60405180910390f35b34801561029857600080fd5b506102766102a73660046122e0565b6106ee565b3480156102b857600080fd5b506102766102c7366004612246565b61080a565b3480156102d857600080fd5b50610276610835565b6102f46102ef36600461210f565b61083b565b6040516102839190612352565b34801561030d57600080fd5b50610316610958565b604051610283919061230b565b34801561032f57600080fd5b5061027661033e3660046122b0565b610967565b34801561034f57600080fd5b5061027661035e3660046122b0565b610a1c565b34801561036f57600080fd5b5061031661037e3660046122b0565b610c7c565b6102f4610ca3565b34801561039757600080fd5b50610316610cb5565b3480156103ac57600080fd5b506103c06103bb36600461210f565b610cc4565b005b3480156103ce57600080fd5b506103c06103dd366004612147565b610ea7565b3480156103ee57600080fd5b506103c06103fd36600461210f565b6110bf565b34801561040e57600080fd5b5061027661041d366004612246565b611146565b34801561042e57600080fd5b50610276611158565b34801561044357600080fd5b506103c061115e565b34801561045857600080fd5b50610276610467366004612246565b611185565b34801561047857600080fd5b50610276610487366004612246565b6111ad565b34801561049857600080fd5b506102766104a736600461210f565b6111c8565b3480156104b857600080fd5b506103c06111e3565b3480156104cd57600080fd5b506102766104dc366004612246565b611262565b3480156104ed57600080fd5b506102766104fc366004612246565b611285565b34801561050d57600080fd5b50610276611295565b34801561052257600080fd5b5061031661136f565b34801561053757600080fd5b506103c061137e565b34801561054c57600080fd5b50610276611480565b34801561056157600080fd5b50610276610570366004612246565b611486565b34801561058157600080fd5b506103166114a7565b34801561059657600080fd5b506103166114b6565b3480156105ab57600080fd5b506103166114c5565b3480156105c057600080fd5b506102766105cf366004612246565b6114d4565b3480156105e057600080fd5b506102766105ef36600461210f565b611529565b34801561060057600080fd5b506103c061153b565b34801561061557600080fd5b50610276610624366004612246565b611876565b34801561063557600080fd5b50610276610644366004612246565b611886565b34801561065557600080fd5b506102766118a9565b34801561066a57600080fd5b506103166118af565b34801561067f57600080fd5b5061027661068e366004612246565b6118be565b34801561069f57600080fd5b506102766106ae366004612246565b6118f5565b3480156106bf57600080fd5b50610276611905565b3480156106d457600080fd5b506103c06106e336600461210f565b61190b565b606f5481565b6000808061070484670de0b6b3a76400006119c2565b9050600085610714606489611a04565b8161071b57fe5b049050600061074d607154610747610740606f54607154611a3e90919063ffffffff16565b8590611a04565b906119c2565b9050855b8385116107fe57600061077b6002610747670de0b6b3a76400006107758a8a611a3e565b90611a04565b90508061078857506107fe565b6000610795828c8c611a63565b905060006107b6633b9aca00610747856102c786662386f26fc10000611a04565b90508481116107de576107d183670de0b6b3a76400006119c2565b60010197508293506107f6565b60016107f284670de0b6b3a76400006119c2565b0396505b505050610751565b98975050505050505050565b60008161082661081c8561068e611ab1565b6002855b04611262565b8161082d57fe5b049392505050565b60705481565b60008034116108655760405162461bcd60e51b815260040161085c906126d0565b60405180910390fd5b6066546108845760405162461bcd60e51b815260040161085c906126fb565b6000805b6001600160a01b038416158015906108a1575060665481105b156108e857836001600160a01b0316606682815481106108bd57fe5b6000918252602090912001546001600160a01b0316146108e057600191506108e8565b600101610888565b506001600160a01b03831615806108fc5750805b6109185760405162461bcd60e51b815260040161085c9061272b565b60006109243485611ac1565b336000908152606560205260409020549091506109419034611a3e565b336000908152606560205260409020559392505050565b6068546001600160a01b031681565b6000806000606c60009054906101000a90046001600160a01b03166001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b1580156109ba57600080fd5b505afa1580156109ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109f29190612267565b506001600160701b031691506001600160701b03169150610a148282866106ee565b949350505050565b600080610a27611d12565b905060008315610a375783610a48565b336000908152606560205260409020545b9050808015801590610a695750336000908152606560205260409020548211155b610a855760405162461bcd60e51b815260040161085c90612664565b606654600090610a969087906119c2565b905060005b606654811015610bf257606754606680546000926001600160a01b0316916321429e609130919086908110610acc57fe5b6000918252602090912001546040516001600160e01b031960e085901b168152610b0392916001600160a01b03169060040161231f565b60206040518083038186803b158015610b1b57600080fd5b505afa158015610b2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b5391906122c8565b905080610b605750610bea565b828111610ba457610b9260668381548110610b7757fe5b6000918252602090912001546001600160a01b031682611d17565b50610b9d8482611dd8565b9350610bdd565b610bcf60668381548110610bb457fe5b6000918252602090912001546001600160a01b031684611d17565b50610bda8484611dd8565b93505b83610be85750610bf2565b505b600101610a9b565b50610c0584610bff611d12565b90611dd8565b935083831115610c13578392505b33600090815260656020526040902054610c2d9084611dd8565b336000908152606560205260409020558215610c7257604051339084156108fc029085906000818181858888f19350505050158015610c70573d6000803e3d6000fd5b505b5090949350505050565b60668181548110610c8957fe5b6000918252602090912001546001600160a01b0316905081565b6000610caf600061083b565b90505b90565b6069546001600160a01b031681565b610ccc611e1a565b6033546001600160a01b03908116911614610cf95760405162461bcd60e51b815260040161085c9061269b565b60675460405163010a14f360e51b81526000916001600160a01b0316906321429e6090610d2c903090869060040161231f565b60206040518083038186803b158015610d4457600080fd5b505afa158015610d58573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d7c91906122c8565b90508015610db3576000610d8e611d12565b9050610d9a8383611d17565b5080610da4611d12565b1415610db1575050610ea4565b505b60005b606654811015610ea157826001600160a01b031660668281548110610dd757fe5b6000918252602090912001546001600160a01b03161415610e995760665460001901811015610e6757606680546000198101908110610e1257fe5b600091825260209091200154606680546001600160a01b039092169183908110610e3857fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055505b6066805480610e7257fe5b600082815260209020810160001990810180546001600160a01b0319169055019055610ea1565b600101610db6565b50505b50565b606c546001600160a01b0316610ea1576001600160a01b03811615610ecc5780610ee2565b73fb76e9e7d88e308ab530330ed90e84a9525703195b606880546001600160a01b03199081166001600160a01b039384161791829055606980548216878516179055606a80549091168584161790556040805163c45a015560e01b81529051919092169163c45a0155916004808301926020929190829003018186803b158015610f5557600080fd5b505afa158015610f69573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f8d919061212b565b606b80546001600160a01b0319166001600160a01b039283161790819055606854604080516315ab88c960e31b815290519284169363e6a439059392169163ad5c464891600480820192602092909190829003018186803b158015610ff157600080fd5b505afa158015611005573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611029919061212b565b856040518363ffffffff1660e01b815260040161104792919061231f565b60206040518083038186803b15801561105f57600080fd5b505afa158015611073573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611097919061212b565b606c80546001600160a01b0319166001600160a01b0392909216919091179055610ea161115e565b6110c7611e1a565b6033546001600160a01b039081169116146110f45760405162461bcd60e51b815260040161085c9061269b565b606680546001810182556000919091527f46501879b8ca8525e8c2fd519e2fbfcfa2ebea26501294aa02cbfcfb12e943540180546001600160a01b0319166001600160a01b0392909216919091179055565b60008161082661081c8561068e611e1e565b606e5481565b60715461118357618235606e819055607255610bb8606f55601e607055620186a06071555b565b600061118f611ab1565b61082661119c85856118be565b60026111a6611ab1565b8161082057fe5b6000818310156111bd57816111bf565b825b90505b92915050565b6001600160a01b031660009081526065602052604090205490565b6111eb611e1a565b6033546001600160a01b039081169116146112185760405162461bcd60e51b815260040161085c9061269b565b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b808201828110156111c25760405162461bcd60e51b815260040161085c90612533565b6000818311156111bd57816111bf565b600080805b60665481101561136957606754606680546000926001600160a01b0316916321429e6091309190869081106112cb57fe5b6000918252602090912001546040516001600160e01b031960e085901b16815261130292916001600160a01b03169060040161231f565b60206040518083038186803b15801561131a57600080fd5b505afa15801561132e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061135291906122c8565b905061135e8382611a3e565b92505060010161129a565b50905090565b606a546001600160a01b031681565b600054610100900460ff16806113975750611397611e2a565b806113a5575060005460ff16155b6113c15760405162461bcd60e51b815260040161085c90612591565b600054610100900460ff161580156113ec576000805460ff1961ff0019909116610100171660011790555b6113f4611e30565b606780546001600160a01b0319908116733014ca10b91cb3d0ad85fef7a3cb95bcac9c0f7917909155606680546001810182556000919091527f46501879b8ca8525e8c2fd519e2fbfcfa2ebea26501294aa02cbfcfb12e9435401805490911673cb876a393f05a6677a8a029f1c6d7603b416c0a61790558015610ea4576000805461ff001916905550565b606d5481565b6000611490611e1e565b61082661149d85856118be565b60026111a6611e1e565b606b546001600160a01b031681565b6033546001600160a01b031690565b6067546001600160a01b031681565b6000600282066114eb576114e6611ab1565b6114ed565b825b90506002820491505b81156111c2576115068384611185565b9250600282061561151e5761151b8184611185565b90505b6002820491506114f6565b60656020526000908152604090205481565b606a5460408051635c9302c960e01b815290516000926001600160a01b031691635c9302c9916004808301926020929190829003018186803b15801561158057600080fd5b505afa158015611594573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115b891906122c8565b9050606d548114156115dc5760405162461bcd60e51b815260040161085c906125df565b60006074546115e9611d12565b03905060008160745401116116105760405162461bcd60e51b815260040161085c90612561565b606d829055607154606e5460009161162f916107479085908303611a04565b905060008183039050606061165761165260745485611a3e90919063ffffffff16565b611f0a565b90506116868160008151811061166957fe5b6020026020010151610bff60745486611a3e90919063ffffffff16565b607455611694826000611ac1565b506000816001815181106116a457fe5b6020026020010151905060006116cb60715461074760705485611a0490919063ffffffff16565b905080156117595760695460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb906117059033908590600401612339565b602060405180830381600087803b15801561171f57600080fd5b505af1158015611733573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117579190612226565b505b600061177a6071546107476072546107758688611dd890919063ffffffff16565b905060006117888483611dd8565b606954606a5460405163a9059cbb60e01b81529293506001600160a01b039182169263a9059cbb926117c09216908590600401612339565b602060405180830381600087803b1580156117da57600080fd5b505af11580156117ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118129190612226565b506073546118209083611a3e565b6073556074546040518a917f49a079c90e07ed02ae8283e86eaeb643c637381d30aa7ba06d155e5b744a85439161186391859187918a918f919033908c90612762565b60405180910390a2505050505050505050565b6000818312156111bd57816111bf565b808203828111156111c25760405162461bcd60e51b815260040161085c90612422565b60715481565b606c546001600160a01b031681565b60008115806118d9575050808202828282816118d657fe5b04145b6111c25760405162461bcd60e51b815260040161085c906124ce565b6000818313156111bd57816111bf565b60725481565b611913611e1a565b6033546001600160a01b039081169116146119405760405162461bcd60e51b815260040161085c9061269b565b6001600160a01b0381166119665760405162461bcd60e51b815260040161085c90612488565b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b60006111bf83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506120ac565b600082611a13575060006111c2565b82820282848281611a2057fe5b04146111bf5760405162461bcd60e51b815260040161085c90612623565b6000828201838110156111bf5760405162461bcd60e51b815260040161085c906124fc565b600080611a72856103e5611a04565b90506000611a808285611a04565b90506000611a9a83611a94886103e8611a04565b90611a3e565b9050808281611aa557fe5b04979650505050505050565b6b033b2e3c9fd0803ce800000090565b606654600090611ad3575060006111c2565b6001600160a01b03821615611b4f576067546040516317066a5760e21b81526001600160a01b0390911690635c19a95c908590611b1490869060040161230b565b6000604051808303818588803b158015611b2d57600080fd5b505af1158015611b41573d6000803e3d6000fd5b5050505050600190506111c2565b606654600090611b659061074786611a94611295565b90508360005b60665481108015611b7c5750600082115b15611d0657606754606680546000926001600160a01b0316916321429e609130919086908110611ba857fe5b6000918252602090912001546040516001600160e01b031960e085901b168152611bdf92916001600160a01b03169060040161231f565b60206040518083038186803b158015611bf757600080fd5b505afa158015611c0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c2f91906122c8565b905083811015611cfd576000611c458583611dd8565b9050838110611c545783611c56565b805b606754606680549293506001600160a01b0390911691635c19a95c91849187908110611c7e57fe5b6000918252602090912001546040516001600160e01b031960e085901b168152611cb4916001600160a01b03169060040161230b565b6000604051808303818588803b158015611ccd57600080fd5b505af1158015611ce1573d6000803e3d6000fd5b5050505050611cf98185611dd890919063ffffffff16565b9350505b50600101611b6b565b50600195945050505050565b303190565b60675460405163f3fef3a360e01b81526000916001600160a01b03169063f3fef3a390611d4a9086908690600401612339565b600060405180830381600087803b158015611d6457600080fd5b505af1925050508015611d75575060015b611dd057611d816127e8565b80611d8c5750611d96565b60009150506111c2565b3d808015611dc0576040519150601f19603f3d011682016040523d82523d6000602084013e611dc5565b606091505b5060009150506111c2565b5060016111c2565b60006111bf83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506120e3565b3390565b670de0b6b3a764000090565b303b1590565b600054610100900460ff1680611e495750611e49611e2a565b80611e57575060005460ff16155b611e735760405162461bcd60e51b815260040161085c90612591565b600054610100900460ff16158015611e9e576000805460ff1961ff0019909116610100171660011790555b6000611ea8611e1a565b603380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3508015610ea4576000805461ff001916905550565b606060008211611f2c5760405162461bcd60e51b815260040161085c90612451565b6000611f3783610967565b604080516002808252606080830184529394509091602083019080368337505060695482519293506001600160a01b0316918391506001908110611f7757fe5b6001600160a01b03928316602091820292909201810191909152606854604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015611fcb57600080fd5b505afa158015611fdf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612003919061212b565b8160008151811061201057fe5b6001600160a01b039283166020918202929092010152606854604051637ff36ab560e01b8152911690637ff36ab590849061205690600090869030904290600401612366565b6000604051808303818588803b15801561206f57600080fd5b505af1158015612083573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f19168201604052610a149190810190612191565b600081836120cd5760405162461bcd60e51b815260040161085c91906123cf565b5060008385816120d957fe5b0495945050505050565b600081848411156121075760405162461bcd60e51b815260040161085c91906123cf565b505050900390565b600060208284031215612120578081fd5b81356111bf8161288d565b60006020828403121561213c578081fd5b81516111bf8161288d565b60008060006060848603121561215b578182fd5b83356121668161288d565b925060208401356121768161288d565b915060408401356121868161288d565b809150509250925092565b600060208083850312156121a3578182fd5b825167ffffffffffffffff8111156121b9578283fd5b8301601f810185136121c9578283fd5b80516121dc6121d7826127c2565b61279b565b81815283810190838501858402850186018910156121f8578687fd5b8694505b8385101561221a5780518352600194909401939185019185016121fc565b50979650505050505050565b600060208284031215612237578081fd5b815180151581146111bf578182fd5b60008060408385031215612258578182fd5b50508035926020909101359150565b60008060006060848603121561227b578283fd5b8351612286816128a2565b6020850151909350612297816128a2565b604085015190925063ffffffff81168114612186578182fd5b6000602082840312156122c1578081fd5b5035919050565b6000602082840312156122d9578081fd5b5051919050565b6000806000606084860312156122f4578283fd5b505081359360208301359350604090920135919050565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b90815260200190565b600060808201868352602060808185015281875180845260a0860191508289019350845b818110156123af5784516001600160a01b03168352938301939183019160010161238a565b50506001600160a01b039690961660408501525050506060015292915050565b6000602080835283518082850152825b818110156123fb578581018301518582016040015282016123df565b8181111561240c5783604083870101525b50601f01601f1916929092016040019392505050565b60208082526015908201527464732d6d6174682d7375622d756e646572666c6f7760581b604082015260600190565b60208082526017908201527f6275792076616c75652073686f756c64206265203e2030000000000000000000604082015260600190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b60208082526014908201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604082015260600190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b60208082526014908201527364732d6d6174682d6164642d6f766572666c6f7760601b604082015260600190565b6020808252601690820152751b9bc819585c9b9a5b99dcc81d1bc818dbdb1b1958dd60521b604082015260600190565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b60208082526024908201527f63616e20636f6c6c656374206f6e6c79206f6e636520696e206120756269206360408201526379636c6560e01b606082015260800190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b60208082526017908201527f696e76616c696420776974686472617720616d6f756e74000000000000000000604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526011908201527007374616b65206d757374206265203e203607c1b604082015260600190565b6020808252601690820152756e6f20617070726f7665642076616c696461746f727360501b604082015260600190565b6020808252601e908201527f76616c696461746f72206e6f7420696e20617070726f766564206c6973740000604082015260600190565b96875260208701959095526040860193909352606085019190915260808401526001600160a01b031660a083015260c082015260e00190565b60405181810167ffffffffffffffff811182821017156127ba57600080fd5b604052919050565b600067ffffffffffffffff8211156127d8578081fd5b5060209081020190565b60e01c90565b600060443d10156127f857610cb2565b600481823e6308c379a061280c82516127e2565b1461281657610cb2565b6040513d600319016004823e80513d67ffffffffffffffff81602484011181841117156128465750505050610cb2565b828401925082519150808211156128605750505050610cb2565b503d8301602082840101111561287857505050610cb2565b601f01601f1916810160200160405291505090565b6001600160a01b0381168114610ea457600080fd5b6001600160701b0381168114610ea457600080fdfea2646970667358221220081add81e96a5a379f92561dd638f8b24a9c3a81ace89f8e1caf531069db6e4564736f6c634300060c0033",
  "immutableReferences": {},
  "sourceMap": "1099:10400:10:-:0;;;;;;;;;;;;;;;;;;;",
  "deployedSourceMap": "1099:10400:10:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1560:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9687:1129;;;;;;;;;;-1:-1:-1;9687:1129:10;;;;;:::i;:::-;;:::i;2048:109:11:-;;;;;;;;;;-1:-1:-1;2048:109:11;;;;;:::i;:::-;;:::i;1594:29:10:-;;;;;;;;;;;;;:::i;3317:586::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;1318:22::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;8980:211::-;;;;;;;;;;-1:-1:-1;8980:211:10;;;;;:::i;:::-;;:::i;4004:1161::-;;;;;;;;;;-1:-1:-1;4004:1161:10;;;;;:::i;:::-;;:::i;1256:27::-;;;;;;;;;;-1:-1:-1;1256:27:10;;;;;:::i;:::-;;:::i;3235:79::-;;;:::i;1343:20::-;;;;;;;;;;;;;:::i;6261:654::-;;;;;;;;;;-1:-1:-1;6261:654:10;;;;;:::i;:::-;;:::i;:::-;;2756:476;;;;;;;;;;-1:-1:-1;2756:476:10;;;;;:::i;:::-;;:::i;5919:78::-;;;;;;;;;;-1:-1:-1;5919:78:10;;;;;:::i;:::-;;:::i;1936:109:11:-;;;;;;;;;;-1:-1:-1;1936:109:11;;;;;:::i;:::-;;:::i;1528:29:10:-;;;;;;;;;;;;;:::i;2527:226::-;;;;;;;;;;;;;:::i;1820:113:11:-;;;;;;;;;;-1:-1:-1;1820:113:11;;;;;:::i;:::-;;:::i;1411:96::-;;;;;;;;;;-1:-1:-1;1411:96:11;;;;;:::i;:::-;;:::i;3906:95:10:-;;;;;;;;;;-1:-1:-1;3906:95:10;;;;;:::i;:::-;;:::i;1956:145:13:-;;;;;;;;;;;;;:::i;916:124:11:-;;;;;;;;;;-1:-1:-1;916:124:11;;;;;:::i;:::-;;:::i;1312:96::-;;;;;;;;;;-1:-1:-1;1312:96:11;;;;;:::i;:::-;;:::i;6000:258:10:-;;;;;;;;;;;;;:::i;1366:26::-;;;;;;;;;;;;;:::i;2291:233::-;;;;;;;;;;;;;:::i;1468:31::-;;;;;;;;;;;;;:::i;1704:113:11:-;;;;;;;;;;-1:-1:-1;1704:113:11;;;;;:::i;:::-;;:::i;1395:36:10:-;;;;;;;;;;;;;:::i;1333:77:13:-;;;;;;;;;;;;;:::i;1287:27:10:-;;;;;;;;;;;;;:::i;2672:206:11:-;;;;;;;;;;-1:-1:-1;2672:206:11;;;;;:::i;:::-;;:::i;1211:42:10:-;;;;;;;;;;-1:-1:-1;1211:42:10;;;;;:::i;:::-;;:::i;6918:1510::-;;;;;;;;;;;;;:::i;1607:94:11:-;;;;;;;;;;-1:-1:-1;1607:94:11;;;;;:::i;:::-;;:::i;1043:125::-;;;;;;;;;;-1:-1:-1;1043:125:11;;;;;:::i;:::-;;:::i;1626:25:10:-;;;;;;;;;;;;;:::i;1434:30::-;;;;;;;;;;;;;:::i;1171:138:11:-;;;;;;;;;;-1:-1:-1;1171:138:11;;;;;:::i;:::-;;:::i;1510:94::-;;;;;;;;;;-1:-1:-1;1510:94:11;;;;;:::i;:::-;;:::i;1654:33:10:-;;;;;;;;;;;;;:::i;2250:240:13:-;;;;;;;;;;-1:-1:-1;2250:240:13;;;;;:::i;:::-;;:::i;1560:31:10:-;;;;:::o;9687:1129::-;9796:7;;;9844:16;:6;9855:4;9844:10;:16::i;:::-;9830:30;-1:-1:-1;9925:19:10;9974:4;9947:24;9955:3;9964:6;9947:16;:24::i;:::-;:31;;;;;;9925:53;;10028:19;10053:65;10107:10;;10053:49;10069:32;10084:16;;10069:10;;:14;;:32;;;;:::i;:::-;10053:11;;:15;:49::i;:::-;:53;;:65::i;:::-;10028:90;-1:-1:-1;10143:6:10;10192:599;10208:3;10199:5;:12;10192:599;;10243:22;10268:31;10297:1;10268:24;10287:4;10268:14;:5;10278:3;10268:9;:14::i;:::-;:18;;:24::i;:31::-;10243:56;-1:-1:-1;10337:19:10;10333:30;;10358:5;;;10333:30;10368:21;10392:42;10405:14;10421:6;10429:4;10392:12;:42::i;:::-;10368:66;-1:-1:-1;10439:27:10;10473:54;10523:3;10473:45;10478:14;10494:23;10368:66;10512:4;10494:17;:23::i;10473:54::-;10439:88;;10560:11;10537:19;:34;10533:207;;10587:24;:14;10606:4;10587:18;:24::i;:::-;10614:1;10587:28;10579:36;;10680:14;10667:27;;10533:207;;;10739:1;10712:24;:14;10731:4;10712:18;:24::i;:::-;:28;10706:34;;10533:207;10192:599;;;;;;10802:10;9687:1129;-1:-1:-1;;;;;;;;9687:1129:10:o;2048:109:11:-;2105:9;2152:1;2124:25;2128:13;2132:1;2135:5;:3;:5::i;2128:13::-;2147:1;2143;:5;;2124:3;:25::i;:::-;:29;;;;;;;2048:109;-1:-1:-1;;;2048:109:11:o;1594:29:10:-;;;;:::o;3317:586::-;3376:4;3406:1;3394:9;:13;3386:43;;;;-1:-1:-1;;;3386:43:10;;;;;;;:::i;:::-;;;;;;;;;3441:10;:17;3433:56;;;;-1:-1:-1;;;3433:56:10;;;;;;;:::i;:::-;3493:10;;3507:166;-1:-1:-1;;;;;3534:24:10;;;;;;:49;;-1:-1:-1;3566:10:10;:17;3562:21;;3534:49;3507:166;;;3622:10;-1:-1:-1;;;;;3605:27:10;:10;3616:1;3605:13;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3605:13:10;:27;3601:68;;3648:4;3640:12;;3658:5;;3601:68;3588:3;;3507:166;;;-1:-1:-1;;;;;;3688:24:10;;;;:33;;;3716:5;3688:33;3676:86;;;;-1:-1:-1;;;3676:86:10;;;;;;;:::i;:::-;3767:11;3781:41;3800:9;3811:10;3781:18;:41::i;:::-;3856:10;3848:19;;;;:7;:19;;;;;;3767:55;;-1:-1:-1;3848:34:10;;3872:9;3848:23;:34::i;:::-;3834:10;3826:19;;;;:7;:19;;;;;:56;3893:6;3317:586;-1:-1:-1;;;3317:586:10:o;1318:22::-;;;-1:-1:-1;;;;;1318:22:10;;:::o;8980:211::-;9056:7;9071:14;9087:12;9105:11;;;;;;;;;-1:-1:-1;;;;;9105:11:10;-1:-1:-1;;;;;9105:23:10;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9070:60;-1:-1:-1;;;;;9070:60:10;;;-1:-1:-1;;;;;9070:60:10;;;9142:45;9166:6;9174:4;9180:6;9142:23;:45::i;:::-;9135:52;8980:211;-1:-1:-1;;;;8980:211:10:o;4004:1161::-;4054:7;4067:24;4094:9;:7;:9::i;:::-;4067:36;-1:-1:-1;4136:18:10;4157:11;;:42;;4193:6;4157:42;;;4179:10;4171:19;;;;:7;:19;;;;;;4157:42;4136:63;-1:-1:-1;4136:63:10;4249:14;;;;;:51;;-1:-1:-1;4289:10:10;4281:19;;;;:7;:19;;;;;;4267:33;;;4249:51;4237:97;;;;-1:-1:-1;;;4237:97:10;;;;;;;:::i;:::-;4372:10;:17;4338:20;;4361:29;;:6;;:10;:29::i;:::-;4338:52;;4399:9;4394:415;4418:10;:17;4414:21;;4394:415;;;4465:9;;4506:10;:13;;4447:11;;-1:-1:-1;;;;;4465:9:10;;:25;;4499:4;;4506:10;4517:1;;4506:13;;;;;;;;;;;;;;;;4465:55;;-1:-1:-1;;;;;;4465:55:10;;;;;;;;;;-1:-1:-1;;;;;4506:13:10;;4465:55;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4447:73;-1:-1:-1;4529:8:10;4525:22;;4539:8;;;4525:22;4563:12;4556:3;:19;4552:223;;4583:39;4603:10;4614:1;4603:13;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4603:13:10;4618:3;4583:19;:39::i;:::-;-1:-1:-1;4640:18:10;:9;4654:3;4640:13;:18::i;:::-;4628:30;;4552:223;;;4676:48;4696:10;4707:1;4696:13;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4696:13:10;4711:12;4676:19;:48::i;:::-;-1:-1:-1;4742:27:10;:9;4756:12;4742:13;:27::i;:::-;4730:39;;4552:223;4783:14;4779:25;;4799:5;;;4779:25;4394:415;;4437:3;;4394:415;;;;4832:31;4846:16;4832:9;:7;:9::i;:::-;:13;;:31::i;:::-;4813:50;;4958:16;4945:10;:29;4941:74;;;4994:16;4981:29;;4941:74;5049:10;5041:19;;;;:7;:19;;;;;;:35;;5065:10;5041:23;:35::i;:::-;5027:10;5019:19;;;;:7;:19;;;;;:57;5084:14;;5080:60;;5100:40;;5108:10;;5100:40;;;;;5129:10;;5100:40;;;;5129:10;5108;5100:40;;;;;;;;;;;;;;;;;;;;;5080:60;-1:-1:-1;5151:10:10;;4004:1161;-1:-1:-1;;;;4004:1161:10:o;1256:27::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1256:27:10;;-1:-1:-1;1256:27:10;:::o;3235:79::-;3276:4;3293:17;3307:1;3293:5;:17::i;:::-;3286:24;;3235:79;;:::o;1343:20::-;;;-1:-1:-1;;;;;1343:20:10;;:::o;6261:654::-;1547:12:13;:10;:12::i;:::-;1537:6;;-1:-1:-1;;;;;1537:6:13;;;:22;;;1529:67;;;;-1:-1:-1;;;1529:67:13;;;;;;;:::i;:::-;6350:9:10::1;::::0;:52:::1;::::0;-1:-1:-1;;;6350:52:10;;6327:17:::1;::::0;-1:-1:-1;;;;;6350:9:10::1;::::0;:25:::1;::::0;:52:::1;::::0;6384:4:::1;::::0;6391:10;;6350:52:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6327:75:::0;-1:-1:-1;6410:13:10;;6406:282:::1;;6430:19;6452:9;:7;:9::i;:::-;6430:31;;6466:42;6486:10;6498:9;6466:19;:42::i;:::-;;6610:11;6597:9;:7;:9::i;:::-;:24;6593:91;;;6672:7;;;;6593:91;6406:282;;6697:9;6692:220;6716:10;:17:::0;6712:21;::::1;6692:220;;;6766:10;-1:-1:-1::0;;;;;6749:27:10::1;:10;6760:1;6749:13;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;6749:13:10::1;:27;6745:163;;;6792:10;:17:::0;-1:-1:-1;;6792:21:10;6788:25;::::1;6784:85;;;6836:10;6847:17:::0;;-1:-1:-1;;6847:21:10;;;6836:33;::::1;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;6820:10:::1;:13:::0;;-1:-1:-1;;;;;6836:33:10;;::::1;::::0;6831:1;;6820:13;::::1;;;;;;;;;;;;;:49;;;;;-1:-1:-1::0;;;;;6820:49:10::1;;;;;-1:-1:-1::0;;;;;6820:49:10::1;;;;;;6784:85;6875:10;:16;;;;;;;;::::0;;;::::1;::::0;;;;-1:-1:-1;;6875:16:10;;;;;-1:-1:-1;;;;;;6875:16:10::1;::::0;;;;;6897:5:::1;;6745:163;6735:3;;6692:220;;;;1606:1:13;;6261:654:10::0;:::o;2756:476::-;2857:11;;-1:-1:-1;;;;;2857:11:10;2845:384;;-1:-1:-1;;;;;2913:22:10;;;:88;;2993:8;2913:88;;;2943:42;2913:88;2890:7;:116;;-1:-1:-1;;;;;;2890:116:10;;;-1:-1:-1;;;;;2890:116:10;;;;;;;;3011:2;:20;;;;;;;;;;3036:9;:33;;;;;;;;;;;3107:17;;;-1:-1:-1;;;3107:17:10;;;;:7;;;;;:15;;:17;;;;;;;;;;;;;;:7;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3075:14;:50;;-1:-1:-1;;;;;;3075:50:10;-1:-1:-1;;;;;3075:50:10;;;;;;;;3184:7;;:14;;;-1:-1:-1;;;3184:14:10;;;;3161;;;;:22;;3184:7;;;:12;;:14;;;;;;;;;;;;;;;:7;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3200:3;3161:43;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3130:11;:79;;-1:-1:-1;;;;;;3130:79:10;-1:-1:-1;;;;;3130:79:10;;;;;;;;;;3214:10;:8;:10::i;5919:78::-;1547:12:13;:10;:12::i;:::-;1537:6;;-1:-1:-1;;;;;1537:6:13;;;:22;;;1529:67;;;;-1:-1:-1;;;1529:67:13;;;;;;;:::i;:::-;5974:10:10::1;:19:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;5974:19:10;;;;;::::1;::::0;;-1:-1:-1;;;;;;5974:19:10::1;-1:-1:-1::0;;;;;5974:19:10;;;::::1;::::0;;;::::1;::::0;;5919:78::o;1936:109:11:-;1993:9;2040:1;2012:25;2016:13;2020:1;2023:5;:3;:5::i;1528:29:10:-;;;;:::o;2527:226::-;2562:10;;2558:192;;2601:5;2584:14;:22;;;2617:18;:26;2673:4;2654:16;:23;2704:2;2687:14;:19;2732:6;2719:10;:19;2558:192;2527:226::o;1820:113:11:-;1877:9;1924:5;:3;:5::i;:::-;1896:25;1900:9;1904:1;1907;1900:3;:9::i;:::-;1919:1;1911:5;:3;:5::i;:::-;:9;;;;1411:96;1467:9;1494:1;1489;:6;;:14;;1502:1;1489:14;;;1498:1;1489:14;1482:21;;1411:96;;;;;:::o;3906:95:10:-;-1:-1:-1;;;;;3982:15:10;3962:7;3982:15;;;:7;:15;;;;;;;3906:95::o;1956:145:13:-;1547:12;:10;:12::i;:::-;1537:6;;-1:-1:-1;;;;;1537:6:13;;;:22;;;1529:67;;;;-1:-1:-1;;;1529:67:13;;;;;;;:::i;:::-;2046:6:::1;::::0;2025:40:::1;::::0;2062:1:::1;::::0;-1:-1:-1;;;;;2046:6:13::1;::::0;2025:40:::1;::::0;2062:1;;2025:40:::1;2075:6;:19:::0;;-1:-1:-1;;;;;;2075:19:13::1;::::0;;1956:145::o;916:124:11:-;1000:5;;;995:16;;;;987:49;;;;-1:-1:-1;;;987:49:11;;;;;;;:::i;1312:96::-;1368:9;1395:1;1390;:6;;:14;;1403:1;1390:14;;6000:258:10;6047:7;;;6081:158;6105:10;:17;6101:21;;6081:158;;;6152:9;;6193:10;:13;;6134:11;;-1:-1:-1;;;;;6152:9:10;;:25;;6186:4;;6193:10;6204:1;;6193:13;;;;;;;;;;;;;;;;6152:55;;-1:-1:-1;;;;;;6152:55:10;;;;;;;;;;-1:-1:-1;;;;;6193:13:10;;6152:55;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6134:73;-1:-1:-1;6220:14:10;:5;6134:73;6220:9;:14::i;:::-;6212:22;-1:-1:-1;;6124:3:10;;6081:158;;;-1:-1:-1;6249:5:10;-1:-1:-1;6000:258:10;:::o;1366:26::-;;;-1:-1:-1;;;;;1366:26:10;;:::o;2291:233::-;1472:13:16;;;;;;;;:33;;;1489:16;:14;:16::i;:::-;1472:50;;;-1:-1:-1;1510:12:16;;;;1509:13;1472:50;1464:109;;;;-1:-1:-1;;;1464:109:16;;;;;;;:::i;:::-;1584:19;1607:13;;;;;;1606:14;1630:98;;;;1664:13;:20;;-1:-1:-1;;;;1664:20:16;;;;;1698:19;1680:4;1698:19;;;1630:98;2336:26:10::1;:24;:26::i;:::-;2366:9;:82:::0;;-1:-1:-1;;;;;;2366:82:10;;::::1;2401:42;2366:82;::::0;;;2452:10:::1;:68:::0;;2366:82;2452:68;::::1;::::0;;2366:9:::1;2452:68:::0;;;;;::::1;::::0;;;;::::1;2476:42;2452:68;::::0;;1750:66:16;;;;1800:5;1784:21;;-1:-1:-1;;1784:21:16;;;2291:233:10;:::o;1468:31::-;;;;:::o;1704:113:11:-;1761:9;1808:5;:3;:5::i;:::-;1780:25;1784:9;1788:1;1791;1784:3;:9::i;:::-;1803:1;1795:5;:3;:5::i;1395:36:10:-;;;-1:-1:-1;;;;;1395:36:10;;:::o;1333:77:13:-;1397:6;;-1:-1:-1;;;;;1397:6:13;1333:77;:::o;1287:27:10:-;;;-1:-1:-1;;;;;1287:27:10;;:::o;2672:206:11:-;2729:9;2752:1;2748;:5;:22;;2765:5;:3;:5::i;:::-;2748:22;;;2761:1;2748:22;2744:26;-1:-1:-1;2785:1:11;2780:6;;;;2775:100;2788:6;;2775:100;;2813:10;2818:1;2821;2813:4;:10::i;:::-;2809:14;-1:-1:-1;2837:1:11;2833;:5;:10;2829:42;;2855:10;2860:1;2863;2855:4;:10::i;:::-;2851:14;;2829:42;2801:1;2796:6;;;;2775:100;;1211:42:10;;;;;;;;;;;;;:::o;6918:1510::-;6976:9;;:22;;;-1:-1:-1;;;6976:22:10;;;;6959:14;;-1:-1:-1;;;;;6976:9:10;;:20;;:22;;;;;;;;;;;;;;:9;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6959:39;;7024:16;;7014:6;:26;;7002:85;;;;-1:-1:-1;;;7002:85:10;;;;;;;:::i;:::-;7092:16;7123:19;;7111:9;:7;:9::i;:::-;:31;7092:50;;7187:1;7176:8;7154:19;;:30;:34;7146:69;;;;-1:-1:-1;;;7146:69:10;;;;;;;:::i;:::-;7220:16;:25;;;7316:10;;7296:14;;7249:15;;7270:57;;:41;;:8;;7283:27;;7270:12;:41::i;:57::-;7249:78;;7331:17;7362:7;7351:8;:18;7331:38;;7374:31;7411:40;7418:32;7430:19;;7418:7;:11;;:32;;;;:::i;:::-;7411:6;:40::i;:::-;7374:77;;7506:62;7547:14;7562:1;7547:17;;;;;;;;;;;;;;7506:32;7518:19;;7506:7;:11;;:32;;;;:::i;:62::-;7484:19;:84;7572:41;7591:9;7610:1;7572:18;:41::i;:::-;;7656:16;7675:14;7690:1;7675:17;;;;;;;;;;;;;;7656:36;;7696:17;7716:44;7749:10;;7716:28;7729:14;;7716:8;:12;;:28;;;;:::i;:44::-;7696:64;-1:-1:-1;7768:13:10;;7764:53;;7783:2;;:34;;-1:-1:-1;;;7783:34:10;;-1:-1:-1;;;;;7783:2:10;;;;:11;;:34;;7795:10;;7807:9;;7783:34;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;7764:53;7822:33;7861:116;7966:10;;7861:72;7914:18;;7861:28;7879:9;7861:8;:17;;:28;;;;:::i;:116::-;7822:155;-1:-1:-1;8022:26:10;8051:39;:8;7822:155;8051:12;:39::i;:::-;8095:2;;8115:9;;8095:51;;-1:-1:-1;;;8095:51:10;;8022:68;;-1:-1:-1;;;;;;8095:2:10;;;;:11;;:51;;8115:9;;8022:68;;8095:51;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;8197:20:10;;:58;;8226:25;8197:24;:58::i;:::-;8174:20;:81;8372:19;;8265:159;;8282:6;;8265:159;;;;8293:18;;8316:25;;8346:8;;8359;;8372:19;8396:10;;8411:9;;8265:159;:::i;:::-;;;;;;;;6918:1510;;;;;;;;;:::o;1607:94:11:-;1662:8;1688:1;1683;:6;;:14;;1696:1;1683:14;;1043:125;1127:5;;;1122:16;;;;1114:50;;;;-1:-1:-1;;;1114:50:11;;;;;;;:::i;1626:25:10:-;;;;:::o;1434:30::-;;;-1:-1:-1;;;;;1434:30:10;;:::o;1171:138:11:-;1227:9;1250:6;;;:30;;-1:-1:-1;;1265:5:11;;;1279:1;1274;1265:5;1274:1;1260:15;;;;;:20;1250:30;1242:63;;;;-1:-1:-1;;;1242:63:11;;;;;;;:::i;1510:94::-;1565:8;1591:1;1586;:6;;:14;;1599:1;1586:14;;1654:33:10;;;;:::o;2250:240:13:-;1547:12;:10;:12::i;:::-;1537:6;;-1:-1:-1;;;;;1537:6:13;;;:22;;;1529:67;;;;-1:-1:-1;;;1529:67:13;;;;;;;:::i;:::-;-1:-1:-1;;;;;2338:22:13;::::1;2330:73;;;;-1:-1:-1::0;;;2330:73:13::1;;;;;;;:::i;:::-;2439:6;::::0;2418:38:::1;::::0;-1:-1:-1;;;;;2418:38:13;;::::1;::::0;2439:6:::1;::::0;2418:38:::1;::::0;2439:6:::1;::::0;2418:38:::1;2466:6;:17:::0;;-1:-1:-1;;;;;;2466:17:13::1;-1:-1:-1::0;;;;;2466:17:13;;;::::1;::::0;;;::::1;::::0;;2250:240::o;3120:130:15:-;3178:7;3204:39;3208:1;3211;3204:39;;;;;;;;;;;;;;;;;:3;:39::i;2199:459::-;2257:7;2498:6;2494:45;;-1:-1:-1;2527:1:15;2520:8;;2494:45;2561:5;;;2565:1;2561;:5;:1;2584:5;;;;;:10;2576:56;;;;-1:-1:-1;;;2576:56:15;;;;;;;:::i;893:176::-;951:7;982:5;;;1005:6;;;;997:46;;;;-1:-1:-1;;;997:46:15;;;;;;;:::i;9233:347:10:-;9347:17;;9396:18;:9;9410:3;9396:13;:18::i;:::-;9370:44;-1:-1:-1;9418:17:10;9438:32;9370:44;9458:11;9438:19;:32::i;:::-;9418:52;-1:-1:-1;9474:19:10;9496:41;9521:15;9496:20;:10;9511:4;9496:14;:20::i;:::-;:24;;:41::i;:::-;9474:63;;9565:11;9553:9;:23;;;;;;;9233:347;-1:-1:-1;;;;;;;9233:347:10:o;845:68:11:-;903:6;845:68;:::o;5168:748:10:-;5269:10;:17;5254:4;;5265:40;;-1:-1:-1;5300:5:10;5293:12;;5265:40;-1:-1:-1;;;;;5313:24:10;;;5309:103;;5344:9;;:47;;-1:-1:-1;;;5344:47:10;;-1:-1:-1;;;;;5344:9:10;;;;:18;;5371:6;;5344:47;;5380:10;;5344:47;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5403:4;5396:11;;;;5309:103;5475:10;:17;5416:20;;5442:51;;:28;5463:6;5442:16;:14;:16::i;:51::-;5416:77;-1:-1:-1;5512:6:10;5497:12;5522:375;5546:10;:17;5542:21;;:33;;;;;5574:1;5567:4;:8;5542:33;5522:375;;;5605:9;;5646:10;:13;;5587:11;;-1:-1:-1;;;;;5605:9:10;;:25;;5639:4;;5646:10;5657:1;;5646:13;;;;;;;;;;;;;;;;5605:55;;-1:-1:-1;;;;;;5605:55:10;;;;;;;;;;-1:-1:-1;;;;;5646:13:10;;5605:55;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5587:73;;5676:12;5670:3;:18;5666:227;;;5696:18;5717:21;:12;5734:3;5717:16;:21::i;:::-;5696:42;;5770:4;5757:10;:17;:37;;5790:4;5757:37;;;5777:10;5757:37;5800:9;;5840:10;:13;;5744:50;;-1:-1:-1;;;;;;5800:9:10;;;;:18;;5744:50;;5851:1;;5840:13;;;;;;;;;;;;;;;;5800:54;;-1:-1:-1;;;;;;5800:54:10;;;;;;;;;-1:-1:-1;;;;;5840:13:10;;5800:54;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5867:20;5876:10;5867:4;:8;;:20;;;;:::i;:::-;5860:27;;5666:227;;-1:-1:-1;5577:3:10;;5522:375;;;-1:-1:-1;5908:4:10;;5168:748;-1:-1:-1;;;;;5168:748:10:o;11369:96::-;11447:4;11431:30;11369:96;:::o;10819:547::-;10922:9;;:39;;-1:-1:-1;;;10922:39:10;;10907:4;;-1:-1:-1;;;;;10922:9:10;;:18;;:39;;10941:10;;10953:7;;10922:39;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10918:445;;;;:::i;:::-;;;;;;;;11151:5;11144:12;;;;;10918:445;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11353:5;11346:12;;;;;10918:445;-1:-1:-1;10974:4:10;10967:11;;1340:134:15;1398:7;1424:43;1428:1;1431;1424:43;;;;;;;;;;;;;;;;;:3;:43::i;828:104:12:-;915:10;828:104;:::o;774:68:11:-;832:6;774:68;:::o;1912:593:16:-;2348:4;2456:17;2491:7;1912:593;:::o;1065:192:13:-;1472:13:16;;;;;;;;:33;;;1489:16;:14;:16::i;:::-;1472:50;;;-1:-1:-1;1510:12:16;;;;1509:13;1472:50;1464:109;;;;-1:-1:-1;;;1464:109:16;;;;;;;:::i;:::-;1584:19;1607:13;;;;;;1606:14;1630:98;;;;1664:13;:20;;-1:-1:-1;;;;1664:20:16;;;;;1698:19;1680:4;1698:19;;;1630:98;1132:17:13::1;1152:12;:10;:12::i;:::-;1174:6;:18:::0;;-1:-1:-1;;;;;;1174:18:13::1;-1:-1:-1::0;;;;;1174:18:13;::::1;::::0;;::::1;::::0;;;1207:43:::1;::::0;1174:18;;-1:-1:-1;1174:18:13;-1:-1:-1;;1207:43:13::1;::::0;-1:-1:-1;;1207:43:13::1;1738:1:16;1754:14:::0;1750:66;;;1800:5;1784:21;;-1:-1:-1;;1784:21:16;;;1065:192:13;:::o;8573:404:10:-;8623:16;8683:1;8674:6;:10;8666:46;;;;-1:-1:-1;;;8666:46:10;;;;;;;:::i;:::-;8716:15;8734:31;8758:6;8734:23;:31::i;:::-;8793:16;;;8807:1;8793:16;;;8769:21;8793:16;;;;;8716:49;;-1:-1:-1;8793:16:10;;;;;;;;;;-1:-1:-1;;8831:2:10;;8813:7;;;;-1:-1:-1;;;;;;8831:2:10;;8813:7;;-1:-1:-1;8831:2:10;;8813:7;;;;;;-1:-1:-1;;;;;8813:21:10;;;:7;;;;;;;;;;:21;;;;8848:7;;:14;;;-1:-1:-1;;;8848:14:10;;;;:7;;;;;:12;;:14;;;;;8813:7;;8848:14;;;;;:7;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8838:4;8843:1;8838:7;;;;;;;;-1:-1:-1;;;;;8838:24:10;;;:7;;;;;;;;;:24;8876:7;;:97;;-1:-1:-1;;;8876:97:10;;:7;;;:29;;8914:7;;8876:97;;:7;;8936:4;;8954;;8965:3;;8876:97;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;8876:97:10;;;;;;;;;;;;:::i;3732:272:15:-;3818:7;3852:12;3845:5;3837:28;;;;-1:-1:-1;;;3837:28:15;;;;;;;;:::i;:::-;;3875:9;3891:1;3887;:5;;;;;;;3732:272;-1:-1:-1;;;;;3732:272:15:o;1765:187::-;1851:7;1886:12;1878:6;;;;1870:29;;;;-1:-1:-1;;;1870:29:15;;;;;;;;:::i;:::-;-1:-1:-1;;;1921:5:15;;;1765:187::o;1859:241:-1:-;;1963:2;1951:9;1942:7;1938:23;1934:32;1931:2;;;-1:-1;;1969:12;1931:2;85:6;72:20;97:33;124:5;97:33;:::i;2107:263::-;;2222:2;2210:9;2201:7;2197:23;2193:32;2190:2;;;-1:-1;;2228:12;2190:2;226:6;220:13;238:33;265:5;238:33;:::i;2377:491::-;;;;2515:2;2503:9;2494:7;2490:23;2486:32;2483:2;;;-1:-1;;2521:12;2483:2;85:6;72:20;97:33;124:5;97:33;:::i;:::-;2573:63;-1:-1;2673:2;2712:22;;72:20;97:33;72:20;97:33;:::i;:::-;2681:63;-1:-1;2781:2;2820:22;;72:20;97:33;72:20;97:33;:::i;:::-;2789:63;;;;2477:391;;;;;:::o;2875:392::-;;3015:2;;3003:9;2994:7;2990:23;2986:32;2983:2;;;-1:-1;;3021:12;2983:2;3072:17;3066:24;3110:18;3102:6;3099:30;3096:2;;;-1:-1;;3132:12;3096:2;3219:22;;422:4;410:17;;406:27;-1:-1;396:2;;-1:-1;;437:12;396:2;477:6;471:13;499:80;514:64;571:6;514:64;:::i;:::-;499:80;:::i;:::-;607:21;;;664:14;;;;639:17;;;753;;;744:27;;;;741:36;-1:-1;738:2;;;-1:-1;;780:12;738:2;-1:-1;806:10;;800:217;825:6;822:1;819:13;800:217;;;1657:13;;893:61;;847:1;840:9;;;;;968:14;;;;996;;800:217;;;-1:-1;3152:99;2977:290;-1:-1;;;;;;;2977:290::o;3274:257::-;;3386:2;3374:9;3365:7;3361:23;3357:32;3354:2;;;-1:-1;;3392:12;3354:2;1112:6;1106:13;32296:5;28037:13;28030:21;32274:5;32271:32;32261:2;;-1:-1;;32307:12;3538:362;;;3657:2;3645:9;3636:7;3632:23;3628:32;3625:2;;;-1:-1;;3663:12;3625:2;-1:-1;;1232:20;;;3814:2;3852:22;;;1232:20;;-1:-1;3619:281::o;3907:533::-;;;;4055:2;4043:9;4034:7;4030:23;4026:32;4023:2;;;-1:-1;;4061:12;4023:2;1385:6;1379:13;1397:33;1424:5;1397:33;:::i;:::-;4224:2;4274:22;;1379:13;4113:74;;-1:-1;1397:33;1379:13;1397:33;:::i;:::-;4343:2;4392:22;;1797:13;4232:74;;-1:-1;28536:10;28525:22;;32761:34;;32751:2;;-1:-1;;32799:12;4447:241;;4551:2;4539:9;4530:7;4526:23;4522:32;4519:2;;;-1:-1;;4557:12;4519:2;-1:-1;1509:20;;4513:175;-1:-1;4513:175::o;4695:263::-;;4810:2;4798:9;4789:7;4785:23;4781:32;4778:2;;;-1:-1;;4816:12;4778:2;-1:-1;1657:13;;4772:186;-1:-1;4772:186::o;5338:491::-;;;;5476:2;5464:9;5455:7;5451:23;5447:32;5444:2;;;-1:-1;;5482:12;5444:2;-1:-1;;1509:20;;;5634:2;5673:22;;1509:20;;-1:-1;5742:2;5781:22;;;1509:20;;5438:391;-1:-1;5438:391::o;14188:222::-;-1:-1;;;;;28319:54;;;;6228:37;;14315:2;14300:18;;14286:124::o;14417:349::-;-1:-1;;;;;28319:54;;;6097:58;;28319:54;;14752:2;14737:18;;6228:37;14580:2;14565:18;;14551:215::o;14773:349::-;-1:-1;;;;;28319:54;;;;6097:58;;15108:2;15093:18;;8324:36;14936:2;14921:18;;14907:215::o;15809:210::-;28037:13;;28030:21;7191:34;;15930:2;15915:18;;15901:118::o;17620:218::-;8324:36;;;17745:2;17730:18;;17716:122::o;17845:736::-;;18122:3;18111:9;18107:19;30570:24;8458:3;8451:58;18249:2;18122:3;18249:2;18238:9;18234:18;18227:48;18289:108;6621:5;27229:12;27645:6;27640:3;27633:19;27673:14;18111:9;27673:14;6633:93;;18249:2;6797:5;27083:14;6809:21;;-1:-1;6836:260;6861:6;6858:1;6855:13;6836:260;;;6922:13;;-1:-1;;;;;28319:54;6228:37;;27488:14;;;;5990;;;;3110:18;6876:9;6836:260;;;-1:-1;;;;;;;28319:54;;;;18484:2;18469:18;;6097:58;-1:-1;;;18567:2;18552:18;8324:36;18281:116;18093:488;-1:-1;;18093:488::o;18588:310::-;;18735:2;;18756:17;18749:47;8666:5;27229:12;27645:6;18735:2;18724:9;18720:18;27633:19;-1:-1;30922:101;30936:6;30933:1;30930:13;30922:101;;;31003:11;;;;;30997:18;30984:11;;;27673:14;30984:11;30977:39;30951:10;;30922:101;;;31038:6;31035:1;31032:13;31029:2;;;-1:-1;27673:14;31094:6;18724:9;31085:16;;31078:27;31029:2;-1:-1;31210:7;31194:14;-1:-1;;31190:28;8824:39;;;;27673:14;8824:39;;18706:192;-1:-1;;;18706:192::o;18905:416::-;19105:2;19119:47;;;9100:2;19090:18;;;27633:19;-1:-1;;;27673:14;;;9116:44;9179:12;;;19076:245::o;19328:416::-;19528:2;19542:47;;;9430:2;19513:18;;;27633:19;9466:25;27673:14;;;9446:46;9511:12;;;19499:245::o;19751:416::-;19951:2;19965:47;;;9762:2;19936:18;;;27633:19;9798:34;27673:14;;;9778:55;-1:-1;;;9853:12;;;9846:30;9895:12;;;19922:245::o;20174:416::-;20374:2;20388:47;;;10146:2;20359:18;;;27633:19;-1:-1;;;27673:14;;;10162:43;10224:12;;;20345:245::o;20597:416::-;20797:2;20811:47;;;10475:2;20782:18;;;27633:19;10511:29;27673:14;;;10491:50;10560:12;;;20768:245::o;21020:416::-;21220:2;21234:47;;;10811:2;21205:18;;;27633:19;-1:-1;;;27673:14;;;10827:43;10889:12;;;21191:245::o;21443:416::-;21643:2;21657:47;;;11140:2;21628:18;;;27633:19;-1:-1;;;27673:14;;;11156:45;11220:12;;;21614:245::o;21866:416::-;22066:2;22080:47;;;11471:2;22051:18;;;27633:19;11507:34;27673:14;;;11487:55;-1:-1;;;11562:12;;;11555:38;11612:12;;;22037:245::o;22289:416::-;22489:2;22503:47;;;11863:2;22474:18;;;27633:19;11899:34;27673:14;;;11879:55;-1:-1;;;11954:12;;;11947:28;11994:12;;;22460:245::o;22712:416::-;22912:2;22926:47;;;12245:2;22897:18;;;27633:19;12281:34;27673:14;;;12261:55;-1:-1;;;12336:12;;;12329:25;12373:12;;;22883:245::o;23135:416::-;23335:2;23349:47;;;12624:2;23320:18;;;27633:19;12660:25;27673:14;;;12640:46;12705:12;;;23306:245::o;23558:416::-;23758:2;23772:47;;;23743:18;;;27633:19;12992:34;27673:14;;;12972:55;13046:12;;;23729:245::o;23981:416::-;24181:2;24195:47;;;13297:2;24166:18;;;27633:19;-1:-1;;;27673:14;;;13313:40;13372:12;;;24152:245::o;24404:416::-;24604:2;24618:47;;;13623:2;24589:18;;;27633:19;-1:-1;;;27673:14;;;13639:45;13703:12;;;24575:245::o;24827:416::-;25027:2;25041:47;;;13954:2;25012:18;;;27633:19;13990:32;27673:14;;;13970:53;14042:12;;;24998:245::o;25479:908::-;8324:36;;;25947:2;25932:18;;8324:36;;;;26030:2;26015:18;;8324:36;;;;26113:2;26098:18;;8324:36;;;;26196:3;26181:19;;8324:36;-1:-1;;;;;28319:54;28330:42;26273:19;;6097:58;26372:3;26357:19;;8324:36;25782:3;25767:19;;25753:634::o;26394:256::-;26456:2;26450:9;26482:17;;;26557:18;26542:34;;26578:22;;;26539:62;26536:2;;;26614:1;;26604:12;26536:2;26456;26623:22;26434:216;;-1:-1;26434:216::o;26657:304::-;;26816:18;26808:6;26805:30;26802:2;;;-1:-1;;26838:12;26802:2;-1:-1;26883:4;26871:17;;;26936:15;;26739:222::o;31231:106::-;31316:3;31312:15;;31284:53::o;31345:739::-;;31418:4;31400:16;31397:26;31394:2;;;31426:5;;31394:2;31460:1;-1:-1;;31439:23;31535:10;31478:34;-1:-1;31503:8;31478:34;:::i;:::-;31527:19;31517:2;;31550:5;;31517:2;31581;31575:9;31617:16;-1:-1;;31613:24;31460:1;31575:9;31589:49;31664:4;31658:11;31745:16;31697:18;31745:16;31738:4;31730:6;31726:17;31723:39;31697:18;31689:6;31686:30;31677:91;31674:2;;;31776:5;;;;;;31674:2;31814:6;31808:4;31804:17;31793:28;;31846:3;31840:10;31826:24;;31697:18;31861:6;31858:30;31855:2;;;31891:5;;;;;;31855:2;;31968:16;31962:4;31958:27;31928:4;31935:6;31923:3;31915:27;;31950:36;31947:2;;;31989:5;;;;;31947:2;31210:7;31194:14;-1:-1;;31190:28;32013:50;;31928:4;32013:50;31581:2;32002:62;32021:3;-1:-1;;31388:696;:::o;32091:117::-;-1:-1;;;;;28319:54;;32150:35;;32140:2;;32199:1;;32189:12;32455:117;-1:-1;;;;;32542:5;28203:42;32517:5;32514:35;32504:2;;32563:1;;32553:12",
  "source": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6;\npragma experimental ABIEncoderV2;\nimport \"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\";\n\nimport \"../utils/DSMath.sol\";\n\nimport \"../Interfaces.sol\";\n\ninterface IConsensus {\n\t/**\n\t * @dev delegate to a validator\n\t * @param _validator the address of the validator msg.sender is delegating to\n\t */\n\tfunction delegate(address _validator) external payable;\n\n\t/**\n\t * @dev Function to be called when a delegator whishes to withdraw some of his staked funds for a validator\n\t * @param _validator the address of the validator msg.sender has delegating to\n\t * @param _amount the amount msg.sender wishes to withdraw from the contract\n\t */\n\tfunction withdraw(address _validator, uint256 _amount) external;\n\n\tfunction delegatedAmount(address _address, address _validator)\n\t\texternal\n\t\tview\n\t\treturns (uint256);\n\n\tfunction stakeAmount(address _address) external view returns (uint256);\n}\n\ncontract FuseStakingV3 is Initializable, OwnableUpgradeable, DSMath {\n\tusing SafeMathUpgradeable for uint256;\n\n\tmapping(address => uint256) public stakers;\n\taddress[] public validators;\n\n\tIConsensus public consensus;\n\n\tUniswap public uniswap;\n\tGoodDollar public GD;\n\tUBIScheme public ubischeme;\n\tUniswapFactory public uniswapFactory;\n\tUniswapPair public uniswapPair;\n\n\tuint256 public lastDayCollected; //ubi day from ubischeme\n\n\tuint256 public stakeBackRatio;\n\tuint256 public maxSlippageRatio;\n\tuint256 public keeperFeeRatio;\n\tuint256 public RATIO_BASE;\n\tuint256 public communityPoolRatio; //out of G$ bought how much should goto pool\n\n\tuint256 communityPoolBalance;\n\tuint256 pendingFuseEarnings; //earnings not  used because of slippage\n\n\tevent UBICollected(\n\t\tuint256 indexed currentDay,\n\t\tuint256 ubi, //G$ sent to ubischeme\n\t\tuint256 communityPool, //G$ added to pool\n\t\tuint256 gdBought, //actual G$ we got out of swapping stakingRewards + pendingFuseEarnings\n\t\tuint256 stakingRewards, //rewards earned since previous collection,\n\t\tuint256 pendingFuseEarnings, //new balance of fuse pending to be swapped for G$\n\t\taddress keeper,\n\t\tuint256 keeperGDFee\n\t);\n\n\t/**\n\t * @dev initialize\n\t */\n\tfunction initialize() public initializer {\n\t\t__Ownable_init_unchained();\n\t\tconsensus = IConsensus(\n\t\t\taddress(0x3014ca10b91cb3D0AD85fEf7A3Cb95BCAc9c0f79)\n\t\t);\n\t\tvalidators.push(address(0xcb876A393F05a6677a8a029f1C6D7603B416C0A6));\n\t}\n\n\tfunction upgrade0() public {\n\t\tif (RATIO_BASE == 0) {\n\t\t\tstakeBackRatio = 33333; //%33\n\t\t\tcommunityPoolRatio = 33333; //%33\n\t\t\tmaxSlippageRatio = 3000; //3%\n\t\t\tkeeperFeeRatio = 30; //0.03%\n\t\t\tRATIO_BASE = 100000; //100%\n\t\t}\n\t}\n\n\tfunction upgrade1(\n\t\taddress _gd,\n\t\taddress _ubischeme,\n\t\taddress _uniswap\n\t) public {\n\t\tif (address(uniswapPair) == address(0)) {\n\t\t\tuniswap = Uniswap(\n\t\t\t\t_uniswap == address(0)\n\t\t\t\t\t? 0xFB76e9E7d88E308aB530330eD90e84a952570319\n\t\t\t\t\t: _uniswap\n\t\t\t);\n\t\t\tGD = GoodDollar(_gd);\n\t\t\tubischeme = UBIScheme(_ubischeme);\n\n\t\t\tuniswapFactory = UniswapFactory(uniswap.factory());\n\t\t\tuniswapPair = UniswapPair(\n\t\t\t\tuniswapFactory.getPair(uniswap.WETH(), _gd)\n\t\t\t);\n\t\t\tupgrade0();\n\t\t}\n\t}\n\n\tfunction stake() public payable returns (bool) {\n\t\treturn stake(address(0));\n\t}\n\n\tfunction stake(address _validator) public payable returns (bool) {\n\t\trequire(msg.value > 0, \"stake must be > 0\");\n\t\trequire(validators.length > 0, \"no approved validators\");\n\t\tbool found;\n\t\tfor (\n\t\t\tuint256 i = 0;\n\t\t\t_validator != address(0) && i < validators.length;\n\t\t\ti++\n\t\t) {\n\t\t\tif (validators[i] != _validator) {\n\t\t\t\tfound = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\trequire(\n\t\t\t_validator == address(0) || found,\n\t\t\t\"validator not in approved list\"\n\t\t);\n\n\t\tbool staked = stakeNextValidator(msg.value, _validator);\n\t\tstakers[msg.sender] = stakers[msg.sender].add(msg.value);\n\t\treturn staked;\n\t}\n\n\tfunction balanceOf(address _owner) public view returns (uint256) {\n\t\treturn stakers[_owner];\n\t}\n\n\tfunction withdraw(uint256 _value) public returns (uint256) {\n\t\tuint256 effectiveBalance = balance(); //use only undelegated funds\n\t\tuint256 toWithdraw = _value == 0 ? stakers[msg.sender] : _value;\n\t\tuint256 toCollect = toWithdraw;\n\t\trequire(\n\t\t\ttoWithdraw > 0 && toWithdraw <= stakers[msg.sender],\n\t\t\t\"invalid withdraw amount\"\n\t\t);\n\t\tuint256 perValidator = _value.div(validators.length);\n\t\tfor (uint256 i = 0; i < validators.length; i++) {\n\t\t\tuint256 cur =\n\t\t\t\tconsensus.delegatedAmount(address(this), validators[i]);\n\t\t\tif (cur == 0) continue;\n\t\t\tif (cur <= perValidator) {\n\t\t\t\tundelegateWithCatch(validators[i], cur);\n\t\t\t\ttoCollect = toCollect.sub(cur);\n\t\t\t} else {\n\t\t\t\tundelegateWithCatch(validators[i], perValidator);\n\t\t\t\ttoCollect = toCollect.sub(perValidator);\n\t\t\t}\n\t\t\tif (toCollect == 0) break;\n\t\t}\n\n\t\teffectiveBalance = balance().sub(effectiveBalance); //use only undelegated funds\n\n\t\t// in case some funds where not withdrawn\n\t\tif (toWithdraw > effectiveBalance) {\n\t\t\ttoWithdraw = effectiveBalance;\n\t\t}\n\n\t\tstakers[msg.sender] = stakers[msg.sender].sub(toWithdraw);\n\t\tif (toWithdraw > 0) payable(msg.sender).transfer(toWithdraw);\n\t\treturn toWithdraw;\n\t}\n\n\tfunction stakeNextValidator(uint256 _value, address _validator)\n\t\tinternal\n\t\treturns (bool)\n\t{\n\t\tif (validators.length == 0) return false;\n\t\tif (_validator != address(0)) {\n\t\t\tconsensus.delegate{ value: _value }(_validator);\n\t\t\treturn true;\n\t\t}\n\n\t\tuint256 perValidator =\n\t\t\ttotalDelegated().add(_value).div(validators.length);\n\t\tuint256 left = _value;\n\t\tfor (uint256 i = 0; i < validators.length && left > 0; i++) {\n\t\t\tuint256 cur =\n\t\t\t\tconsensus.delegatedAmount(address(this), validators[i]);\n\n\t\t\tif (cur < perValidator) {\n\t\t\t\tuint256 toDelegate = perValidator.sub(cur);\n\t\t\t\ttoDelegate = toDelegate < left ? toDelegate : left;\n\t\t\t\tconsensus.delegate{ value: toDelegate }(validators[i]);\n\t\t\t\tleft = left.sub(toDelegate);\n\t\t\t}\n\t\t}\n\n\t\treturn true;\n\t}\n\n\tfunction addValidator(address _v) public onlyOwner {\n\t\tvalidators.push(_v);\n\t}\n\n\tfunction totalDelegated() public view returns (uint256) {\n\t\tuint256 total = 0;\n\t\tfor (uint256 i = 0; i < validators.length; i++) {\n\t\t\tuint256 cur =\n\t\t\t\tconsensus.delegatedAmount(address(this), validators[i]);\n\t\t\ttotal = total.add(cur);\n\t\t}\n\t\treturn total;\n\t}\n\n\tfunction removeValidator(address _validator) public onlyOwner {\n\t\tuint256 delegated =\n\t\t\tconsensus.delegatedAmount(address(this), _validator);\n\t\tif (delegated > 0) {\n\t\t\tuint256 prevBalance = balance();\n\t\t\tundelegateWithCatch(_validator, delegated);\n\n\t\t\t// wasnt withdrawn because validator needs to be taken of active validators\n\t\t\tif (balance() == prevBalance) {\n\t\t\t\t// pendingValidators.push(_validator);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tfor (uint256 i = 0; i < validators.length; i++) {\n\t\t\tif (validators[i] == _validator) {\n\t\t\t\tif (i < validators.length - 1)\n\t\t\t\t\tvalidators[i] = validators[validators.length - 1];\n\t\t\t\tvalidators.pop();\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction collectUBIInterest() public {\n\t\tuint256 curDay = ubischeme.currentDay();\n\t\trequire(\n\t\t\tcurDay != lastDayCollected,\n\t\t\t\"can collect only once in a ubi cycle\"\n\t\t);\n\n\t\tuint256 earnings = balance() - pendingFuseEarnings;\n\t\trequire(pendingFuseEarnings + earnings > 0, \"no earnings to collect\");\n\n\t\tlastDayCollected = curDay;\n\t\tuint256 fuseUBI =\n\t\t\tearnings.mul(RATIO_BASE - stakeBackRatio).div(RATIO_BASE);\n\t\tuint256 stakeBack = earnings - fuseUBI;\n\n\t\tuint256[] memory fuseswapResult =\n\t\t\t_buyGD(fuseUBI.add(pendingFuseEarnings)); //buy GD with X% of earnings\n\t\tpendingFuseEarnings = fuseUBI.add(pendingFuseEarnings).sub(\n\t\t\tfuseswapResult[0]\n\t\t);\n\t\tstakeNextValidator(stakeBack, address(0)); //stake back the rest of the earnings\n\n\t\tuint256 gdBought = fuseswapResult[1];\n\t\tuint256 keeperFee = gdBought.mul(keeperFeeRatio).div(RATIO_BASE);\n\t\tif (keeperFee > 0) GD.transfer(msg.sender, keeperFee);\n\n\t\tuint256 communityPoolContribution =\n\t\t\tgdBought\n\t\t\t\t.sub(keeperFee) //subtract fee\n\t\t\t\t.mul(communityPoolRatio) // * ommunityPoolRatio\n\t\t\t\t.div(RATIO_BASE); // = G$ after fee * communityPoolRatio%\n\n\t\tuint256 ubiAfterFeeAndPool = gdBought.sub(communityPoolContribution);\n\n\t\tGD.transfer(address(ubischeme), ubiAfterFeeAndPool); //transfer to ubischeme\n\t\tcommunityPoolBalance = communityPoolBalance.add(\n\t\t\tcommunityPoolContribution\n\t\t);\n\n\t\temit UBICollected(\n\t\t\tcurDay,\n\t\t\tubiAfterFeeAndPool,\n\t\t\tcommunityPoolContribution,\n\t\t\tgdBought,\n\t\t\tearnings,\n\t\t\tpendingFuseEarnings,\n\t\t\tmsg.sender,\n\t\t\tkeeperFee\n\t\t);\n\t}\n\n\t/**\n\t * @dev internal method to buy GD from fuseswap\n\t * @param _value fuse to be sold\n\t * @return uniswap coversion results uint256[2]\n\t */\n\tfunction _buyGD(uint256 _value) internal returns (uint256[] memory) {\n\t\t//buy from uniwasp\n\t\trequire(_value > 0, \"buy value should be > 0\");\n\t\tuint256 maxFuse = calcMaxFuseWithSlippage(_value);\n\t\taddress[] memory path = new address[](2);\n\t\tpath[1] = address(GD);\n\t\tpath[0] = uniswap.WETH();\n\t\treturn\n\t\t\tuniswap.swapExactETHForTokens{ value: maxFuse }(\n\t\t\t\t0,\n\t\t\t\tpath,\n\t\t\t\taddress(this),\n\t\t\t\tnow\n\t\t\t);\n\t}\n\n\tfunction calcMaxFuseWithSlippage(uint256 _value)\n\t\tpublic\n\t\tview\n\t\treturns (uint256)\n\t{\n\t\t(uint256 r_fuse, uint256 r_gd, ) = uniswapPair.getReserves();\n\n\t\treturn calcMaxFuseWithSlippage(r_fuse, r_gd, _value);\n\t}\n\n\t/**\n\t * uniswap amountOut helper\n\t */\n\tfunction getAmountOut(\n\t\tuint256 _amountIn,\n\t\tuint256 _reserveIn,\n\t\tuint256 _reserveOut\n\t) internal pure returns (uint256 amountOut) {\n\t\tuint256 amountInWithFee = _amountIn.mul(997);\n\t\tuint256 numerator = amountInWithFee.mul(_reserveOut);\n\t\tuint256 denominator = _reserveIn.mul(1000).add(amountInWithFee);\n\t\tamountOut = numerator / denominator;\n\t}\n\n\t/**\n\t * @dev use binary search to find quantity that will result with slippage < maxSlippageRatio\n\t */\n\tfunction calcMaxFuseWithSlippage(\n\t\tuint256 r_fuse,\n\t\tuint256 r_gd,\n\t\tuint256 _value\n\t) public view returns (uint256) {\n\t\tuint256 start = 0;\n\t\tuint256 end = _value.div(1e18); //save iterations by moving precision to whole Fuse quantity\n\t\tuint256 curPriceWei = uint256(100).mul(r_fuse) / r_gd; //uniswap quote  formula UniswapV2Library.sol\n\t\tuint256 maxPriceWei =\n\t\t\tcurPriceWei.mul(RATIO_BASE.add(maxSlippageRatio)).div(RATIO_BASE);\n\t\tuint256 fuseAmount = _value;\n\n\t\t//Iterate while start not meets end\n\t\twhile (start <= end) {\n\t\t\t// Find the mid index\n\t\t\tuint256 midQuantityWei = start.add(end).mul(1e18).div(2); //restore quantity precision\n\t\t\tif (midQuantityWei == 0) break;\n\t\t\tuint256 gdForQuantity = getAmountOut(midQuantityWei, r_fuse, r_gd);\n\t\t\tuint256 priceForQuantityWei =\n\t\t\t\trdiv(midQuantityWei, gdForQuantity.mul(1e16)).div(1e9);\n\n\t\t\tif (priceForQuantityWei <= maxPriceWei) {\n\t\t\t\tstart = midQuantityWei.div(1e18) + 1; //reduce precision to whole quantity div 1e18\n\t\t\t\tfuseAmount = midQuantityWei;\n\t\t\t} else end = midQuantityWei.div(1e18) - 1; //reduce precision to whole quantity div 1e18\n\t\t}\n\n\t\treturn fuseAmount;\n\t}\n\n\tfunction undelegateWithCatch(address _validator, uint256 _amount)\n\t\tinternal\n\t\treturns (bool)\n\t{\n\t\ttry consensus.withdraw(_validator, _amount) {\n\t\t\treturn true;\n\t\t} catch Error(\n\t\t\tstring memory /*reason*/\n\t\t) {\n\t\t\t// This is executed in case\n\t\t\t// revert was called inside getData\n\t\t\t// and a reason string was provided.\n\t\t\treturn false;\n\t\t} catch (\n\t\t\tbytes memory /*lowLevelData*/\n\t\t) {\n\t\t\t// This is executed in case revert() was used\n\t\t\t// or there was a failing assertion, division\n\t\t\t// by zero, etc. inside getData.\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tfunction balance() internal view returns (uint256) {\n\t\treturn payable(address(this)).balance;\n\t}\n\n\treceive() external payable {}\n}\n",
  "sourcePath": "/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/upgradables/contracts/staking/FuseStakingV3.sol",
  "ast": {
    "absolutePath": "/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/upgradables/contracts/staking/FuseStakingV3.sol",
    "exportedSymbols": {
      "FuseStakingV3": [
        7377
      ],
      "IConsensus": [
        6164
      ]
    },
    "id": 7378,
    "license": "MIT",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 6127,
        "literals": [
          "solidity",
          ">=",
          "0.6"
        ],
        "nodeType": "PragmaDirective",
        "src": "33:22:10"
      },
      {
        "id": 6128,
        "literals": [
          "experimental",
          "ABIEncoderV2"
        ],
        "nodeType": "PragmaDirective",
        "src": "56:33:10"
      },
      {
        "absolutePath": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol",
        "file": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol",
        "id": 6129,
        "nodeType": "ImportDirective",
        "scope": 7378,
        "sourceUnit": 8212,
        "src": "90:69:10",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol",
        "file": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol",
        "id": 6130,
        "nodeType": "ImportDirective",
        "scope": 7378,
        "sourceUnit": 7874,
        "src": "160:75:10",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol",
        "file": "@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol",
        "id": 6131,
        "nodeType": "ImportDirective",
        "scope": 7378,
        "sourceUnit": 8141,
        "src": "236:74:10",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/upgradables/contracts/utils/DSMath.sol",
        "file": "../utils/DSMath.sol",
        "id": 6132,
        "nodeType": "ImportDirective",
        "scope": 7378,
        "sourceUnit": 7699,
        "src": "312:29:10",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/upgradables/contracts/Interfaces.sol",
        "file": "../Interfaces.sol",
        "id": 6133,
        "nodeType": "ImportDirective",
        "scope": 7378,
        "sourceUnit": 552,
        "src": "343:27:10",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "interface",
        "documentation": null,
        "fullyImplemented": false,
        "id": 6164,
        "linearizedBaseContracts": [
          6164
        ],
        "name": "IConsensus",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": null,
            "documentation": {
              "id": 6134,
              "nodeType": "StructuredDocumentation",
              "src": "396:120:10",
              "text": " @dev delegate to a validator\n @param _validator the address of the validator msg.sender is delegating to"
            },
            "functionSelector": "5c19a95c",
            "id": 6139,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "delegate",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 6137,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6136,
                  "mutability": "mutable",
                  "name": "_validator",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6139,
                  "src": "536:18:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6135,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "536:7:10",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "535:20:10"
            },
            "returnParameters": {
              "id": 6138,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "572:0:10"
            },
            "scope": 6164,
            "src": "518:55:10",
            "stateMutability": "payable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": {
              "id": 6140,
              "nodeType": "StructuredDocumentation",
              "src": "576:275:10",
              "text": " @dev Function to be called when a delegator whishes to withdraw some of his staked funds for a validator\n @param _validator the address of the validator msg.sender has delegating to\n @param _amount the amount msg.sender wishes to withdraw from the contract"
            },
            "functionSelector": "f3fef3a3",
            "id": 6147,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "withdraw",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 6145,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6142,
                  "mutability": "mutable",
                  "name": "_validator",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6147,
                  "src": "871:18:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6141,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "871:7:10",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6144,
                  "mutability": "mutable",
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6147,
                  "src": "891:15:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 6143,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "891:7:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "870:37:10"
            },
            "returnParameters": {
              "id": 6146,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "916:0:10"
            },
            "scope": 6164,
            "src": "853:64:10",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": null,
            "functionSelector": "21429e60",
            "id": 6156,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "delegatedAmount",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 6152,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6149,
                  "mutability": "mutable",
                  "name": "_address",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6156,
                  "src": "945:16:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6148,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "945:7:10",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6151,
                  "mutability": "mutable",
                  "name": "_validator",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6156,
                  "src": "963:18:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6150,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "963:7:10",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "944:38:10"
            },
            "returnParameters": {
              "id": 6155,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6154,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6156,
                  "src": "1012:7:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 6153,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1012:7:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1011:9:10"
            },
            "scope": 6164,
            "src": "920:101:10",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": null,
            "functionSelector": "bf135267",
            "id": 6163,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "stakeAmount",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 6159,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6158,
                  "mutability": "mutable",
                  "name": "_address",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6163,
                  "src": "1045:16:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6157,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1045:7:10",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1044:18:10"
            },
            "returnParameters": {
              "id": 6162,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6161,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6163,
                  "src": "1086:7:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 6160,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1086:7:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1085:9:10"
            },
            "scope": 6164,
            "src": "1024:71:10",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          }
        ],
        "scope": 7378,
        "src": "372:725:10"
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 6165,
              "name": "Initializable",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 8211,
              "src": "1125:13:10",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Initializable_$8211",
                "typeString": "contract Initializable"
              }
            },
            "id": 6166,
            "nodeType": "InheritanceSpecifier",
            "src": "1125:13:10"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 6167,
              "name": "OwnableUpgradeable",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 7873,
              "src": "1140:18:10",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_OwnableUpgradeable_$7873",
                "typeString": "contract OwnableUpgradeable"
              }
            },
            "id": 6168,
            "nodeType": "InheritanceSpecifier",
            "src": "1140:18:10"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 6169,
              "name": "DSMath",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 7698,
              "src": "1160:6:10",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_DSMath_$7698",
                "typeString": "contract DSMath"
              }
            },
            "id": 6170,
            "nodeType": "InheritanceSpecifier",
            "src": "1160:6:10"
          }
        ],
        "contractDependencies": [
          7698,
          7743,
          7873,
          8211
        ],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 7377,
        "linearizedBaseContracts": [
          7377,
          7698,
          7873,
          7743,
          8211
        ],
        "name": "FuseStakingV3",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "id": 6173,
            "libraryName": {
              "contractScope": null,
              "id": 6171,
              "name": "SafeMathUpgradeable",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 8140,
              "src": "1176:19:10",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_SafeMathUpgradeable_$8140",
                "typeString": "library SafeMathUpgradeable"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "1170:38:10",
            "typeName": {
              "id": 6172,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1200:7:10",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            }
          },
          {
            "constant": false,
            "functionSelector": "9168ae72",
            "id": 6177,
            "mutability": "mutable",
            "name": "stakers",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 7377,
            "src": "1211:42:10",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
              "typeString": "mapping(address => uint256)"
            },
            "typeName": {
              "id": 6176,
              "keyType": {
                "id": 6174,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "1219:7:10",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "1211:27:10",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                "typeString": "mapping(address => uint256)"
              },
              "valueType": {
                "id": 6175,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "1230:7:10",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "35aa2e44",
            "id": 6180,
            "mutability": "mutable",
            "name": "validators",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 7377,
            "src": "1256:27:10",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_array$_t_address_$dyn_storage",
              "typeString": "address[]"
            },
            "typeName": {
              "baseType": {
                "id": 6178,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "1256:7:10",
                "stateMutability": "nonpayable",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "id": 6179,
              "length": null,
              "nodeType": "ArrayTypeName",
              "src": "1256:9:10",
              "typeDescriptions": {
                "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                "typeString": "address[]"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "8ef3f761",
            "id": 6182,
            "mutability": "mutable",
            "name": "consensus",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 7377,
            "src": "1287:27:10",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_IConsensus_$6164",
              "typeString": "contract IConsensus"
            },
            "typeName": {
              "contractScope": null,
              "id": 6181,
              "name": "IConsensus",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 6164,
              "src": "1287:10:10",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IConsensus_$6164",
                "typeString": "contract IConsensus"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "2681f7e4",
            "id": 6184,
            "mutability": "mutable",
            "name": "uniswap",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 7377,
            "src": "1318:22:10",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_Uniswap_$444",
              "typeString": "contract Uniswap"
            },
            "typeName": {
              "contractScope": null,
              "id": 6183,
              "name": "Uniswap",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 444,
              "src": "1318:7:10",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Uniswap_$444",
                "typeString": "contract Uniswap"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "3fb1ccf1",
            "id": 6186,
            "mutability": "mutable",
            "name": "GD",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 7377,
            "src": "1343:20:10",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_GoodDollar_$330",
              "typeString": "contract GoodDollar"
            },
            "typeName": {
              "contractScope": null,
              "id": 6185,
              "name": "GoodDollar",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 330,
              "src": "1343:10:10",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_GoodDollar_$330",
                "typeString": "contract GoodDollar"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "81028f67",
            "id": 6188,
            "mutability": "mutable",
            "name": "ubischeme",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 7377,
            "src": "1366:26:10",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_UBIScheme_$519",
              "typeString": "contract UBIScheme"
            },
            "typeName": {
              "contractScope": null,
              "id": 6187,
              "name": "UBIScheme",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 519,
              "src": "1366:9:10",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_UBIScheme_$519",
                "typeString": "contract UBIScheme"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "8bdb2afa",
            "id": 6190,
            "mutability": "mutable",
            "name": "uniswapFactory",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 7377,
            "src": "1395:36:10",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_UniswapFactory_$454",
              "typeString": "contract UniswapFactory"
            },
            "typeName": {
              "contractScope": null,
              "id": 6189,
              "name": "UniswapFactory",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 454,
              "src": "1395:14:10",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_UniswapFactory_$454",
                "typeString": "contract UniswapFactory"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "c816841b",
            "id": 6192,
            "mutability": "mutable",
            "name": "uniswapPair",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 7377,
            "src": "1434:30:10",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_UniswapPair_$469",
              "typeString": "contract UniswapPair"
            },
            "typeName": {
              "contractScope": null,
              "id": 6191,
              "name": "UniswapPair",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 469,
              "src": "1434:11:10",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_UniswapPair_$469",
                "typeString": "contract UniswapPair"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "8918c4a2",
            "id": 6194,
            "mutability": "mutable",
            "name": "lastDayCollected",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 7377,
            "src": "1468:31:10",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 6193,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1468:7:10",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "6021a9d5",
            "id": 6196,
            "mutability": "mutable",
            "name": "stakeBackRatio",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 7377,
            "src": "1528:29:10",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 6195,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1528:7:10",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "04d26ebf",
            "id": 6198,
            "mutability": "mutable",
            "name": "maxSlippageRatio",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 7377,
            "src": "1560:31:10",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 6197,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1560:7:10",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "150d7e47",
            "id": 6200,
            "mutability": "mutable",
            "name": "keeperFeeRatio",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 7377,
            "src": "1594:29:10",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 6199,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1594:7:10",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "c11a5630",
            "id": 6202,
            "mutability": "mutable",
            "name": "RATIO_BASE",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 7377,
            "src": "1626:25:10",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 6201,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1626:7:10",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "d22e9b06",
            "id": 6204,
            "mutability": "mutable",
            "name": "communityPoolRatio",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 7377,
            "src": "1654:33:10",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 6203,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1654:7:10",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 6206,
            "mutability": "mutable",
            "name": "communityPoolBalance",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 7377,
            "src": "1736:28:10",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 6205,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1736:7:10",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 6208,
            "mutability": "mutable",
            "name": "pendingFuseEarnings",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 7377,
            "src": "1767:27:10",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 6207,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1767:7:10",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 6226,
            "name": "UBICollected",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 6225,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6210,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "currentDay",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6226,
                  "src": "1861:26:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 6209,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1861:7:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6212,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "ubi",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6226,
                  "src": "1891:11:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 6211,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1891:7:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6214,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "communityPool",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6226,
                  "src": "1929:21:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 6213,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1929:7:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6216,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "gdBought",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6226,
                  "src": "1973:16:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 6215,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1973:7:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6218,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "stakingRewards",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6226,
                  "src": "2065:22:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 6217,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2065:7:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6220,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "pendingFuseEarnings",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6226,
                  "src": "2135:27:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 6219,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2135:7:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6222,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "keeper",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6226,
                  "src": "2217:14:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6221,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2217:7:10",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6224,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "keeperGDFee",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6226,
                  "src": "2235:19:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 6223,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2235:7:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1857:400:10"
            },
            "src": "1839:419:10"
          },
          {
            "body": {
              "id": 6253,
              "nodeType": "Block",
              "src": "2332:192:10",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 6232,
                      "name": "__Ownable_init_unchained",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7796,
                      "src": "2336:24:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 6233,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2336:26:10",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6234,
                  "nodeType": "ExpressionStatement",
                  "src": "2336:26:10"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 6242,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 6235,
                      "name": "consensus",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6182,
                      "src": "2366:9:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IConsensus_$6164",
                        "typeString": "contract IConsensus"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "307833303134636131306239316362334430414438356645663741334362393542434163396330663739",
                              "id": 6239,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2401:42:10",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              "value": "0x3014ca10b91cb3D0AD85fEf7A3Cb95BCAc9c0f79"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            ],
                            "id": 6238,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "2393:7:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 6237,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "2393:7:10",
                              "typeDescriptions": {
                                "typeIdentifier": null,
                                "typeString": null
                              }
                            }
                          },
                          "id": 6240,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2393:51:10",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 6236,
                        "name": "IConsensus",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6164,
                        "src": "2378:10:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_IConsensus_$6164_$",
                          "typeString": "type(contract IConsensus)"
                        }
                      },
                      "id": 6241,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2378:70:10",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IConsensus_$6164",
                        "typeString": "contract IConsensus"
                      }
                    },
                    "src": "2366:82:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IConsensus_$6164",
                      "typeString": "contract IConsensus"
                    }
                  },
                  "id": 6243,
                  "nodeType": "ExpressionStatement",
                  "src": "2366:82:10"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "307863623837364133393346303561363637376138613032396631433644373630334234313643304136",
                            "id": 6249,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2476:42:10",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            },
                            "value": "0xcb876A393F05a6677a8a029f1C6D7603B416C0A6"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          ],
                          "id": 6248,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "2468:7:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 6247,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "2468:7:10",
                            "typeDescriptions": {
                              "typeIdentifier": null,
                              "typeString": null
                            }
                          }
                        },
                        "id": 6250,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2468:51:10",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 6244,
                        "name": "validators",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6180,
                        "src": "2452:10:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_storage",
                          "typeString": "address[] storage ref"
                        }
                      },
                      "id": 6246,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "push",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "2452:15:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_arraypush_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 6251,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2452:68:10",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6252,
                  "nodeType": "ExpressionStatement",
                  "src": "2452:68:10"
                }
              ]
            },
            "documentation": {
              "id": 6227,
              "nodeType": "StructuredDocumentation",
              "src": "2261:28:10",
              "text": " @dev initialize"
            },
            "functionSelector": "8129fc1c",
            "id": 6254,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 6230,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 6229,
                  "name": "initializer",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 8188,
                  "src": "2320:11:10",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2320:11:10"
              }
            ],
            "name": "initialize",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 6228,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2310:2:10"
            },
            "returnParameters": {
              "id": 6231,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2332:0:10"
            },
            "scope": 7377,
            "src": "2291:233:10",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 6282,
              "nodeType": "Block",
              "src": "2554:199:10",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 6259,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 6257,
                      "name": "RATIO_BASE",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6202,
                      "src": "2562:10:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 6258,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2576:1:10",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "2562:15:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 6281,
                  "nodeType": "IfStatement",
                  "src": "2558:192:10",
                  "trueBody": {
                    "id": 6280,
                    "nodeType": "Block",
                    "src": "2579:171:10",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 6262,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 6260,
                            "name": "stakeBackRatio",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6196,
                            "src": "2584:14:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "3333333333",
                            "id": 6261,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2601:5:10",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_33333_by_1",
                              "typeString": "int_const 33333"
                            },
                            "value": "33333"
                          },
                          "src": "2584:22:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 6263,
                        "nodeType": "ExpressionStatement",
                        "src": "2584:22:10"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 6266,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 6264,
                            "name": "communityPoolRatio",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6204,
                            "src": "2617:18:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "3333333333",
                            "id": 6265,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2638:5:10",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_33333_by_1",
                              "typeString": "int_const 33333"
                            },
                            "value": "33333"
                          },
                          "src": "2617:26:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 6267,
                        "nodeType": "ExpressionStatement",
                        "src": "2617:26:10"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 6270,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 6268,
                            "name": "maxSlippageRatio",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6198,
                            "src": "2654:16:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "33303030",
                            "id": 6269,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2673:4:10",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_3000_by_1",
                              "typeString": "int_const 3000"
                            },
                            "value": "3000"
                          },
                          "src": "2654:23:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 6271,
                        "nodeType": "ExpressionStatement",
                        "src": "2654:23:10"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 6274,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 6272,
                            "name": "keeperFeeRatio",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6200,
                            "src": "2687:14:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "3330",
                            "id": 6273,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2704:2:10",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_30_by_1",
                              "typeString": "int_const 30"
                            },
                            "value": "30"
                          },
                          "src": "2687:19:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 6275,
                        "nodeType": "ExpressionStatement",
                        "src": "2687:19:10"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 6278,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 6276,
                            "name": "RATIO_BASE",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6202,
                            "src": "2719:10:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "313030303030",
                            "id": 6277,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2732:6:10",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_100000_by_1",
                              "typeString": "int_const 100000"
                            },
                            "value": "100000"
                          },
                          "src": "2719:19:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 6279,
                        "nodeType": "ExpressionStatement",
                        "src": "2719:19:10"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": null,
            "functionSelector": "6711281c",
            "id": 6283,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "upgrade0",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 6255,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2544:2:10"
            },
            "returnParameters": {
              "id": 6256,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2554:0:10"
            },
            "scope": 7377,
            "src": "2527:226:10",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 6352,
              "nodeType": "Block",
              "src": "2841:391:10",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 6300,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 6294,
                          "name": "uniswapPair",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6192,
                          "src": "2857:11:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_UniswapPair_$469",
                            "typeString": "contract UniswapPair"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_UniswapPair_$469",
                            "typeString": "contract UniswapPair"
                          }
                        ],
                        "id": 6293,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "2849:7:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": {
                          "id": 6292,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2849:7:10",
                          "typeDescriptions": {
                            "typeIdentifier": null,
                            "typeString": null
                          }
                        }
                      },
                      "id": 6295,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2849:20:10",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 6298,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "2881:1:10",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          }
                        ],
                        "id": 6297,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "2873:7:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": {
                          "id": 6296,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2873:7:10",
                          "typeDescriptions": {
                            "typeIdentifier": null,
                            "typeString": null
                          }
                        }
                      },
                      "id": 6299,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2873:10:10",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "2849:34:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 6351,
                  "nodeType": "IfStatement",
                  "src": "2845:384:10",
                  "trueBody": {
                    "id": 6350,
                    "nodeType": "Block",
                    "src": "2885:344:10",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 6313,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 6301,
                            "name": "uniswap",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6184,
                            "src": "2890:7:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_Uniswap_$444",
                              "typeString": "contract Uniswap"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "condition": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  "id": 6308,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "id": 6303,
                                    "name": "_uniswap",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6289,
                                    "src": "2913:8:10",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "==",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "hexValue": "30",
                                        "id": 6306,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "2933:1:10",
                                        "subdenomination": null,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_0_by_1",
                                          "typeString": "int_const 0"
                                        },
                                        "value": "0"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_rational_0_by_1",
                                          "typeString": "int_const 0"
                                        }
                                      ],
                                      "id": 6305,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "nodeType": "ElementaryTypeNameExpression",
                                      "src": "2925:7:10",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_address_$",
                                        "typeString": "type(address)"
                                      },
                                      "typeName": {
                                        "id": 6304,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2925:7:10",
                                        "typeDescriptions": {
                                          "typeIdentifier": null,
                                          "typeString": null
                                        }
                                      }
                                    },
                                    "id": 6307,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "2925:10:10",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address_payable",
                                      "typeString": "address payable"
                                    }
                                  },
                                  "src": "2913:22:10",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "falseExpression": {
                                  "argumentTypes": null,
                                  "id": 6310,
                                  "name": "_uniswap",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6289,
                                  "src": "2993:8:10",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "id": 6311,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "Conditional",
                                "src": "2913:88:10",
                                "trueExpression": {
                                  "argumentTypes": null,
                                  "hexValue": "307846423736653945376438384533303861423533303333306544393065383461393532353730333139",
                                  "id": 6309,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "2943:42:10",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address_payable",
                                    "typeString": "address payable"
                                  },
                                  "value": "0xFB76e9E7d88E308aB530330eD90e84a952570319"
                                },
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 6302,
                              "name": "Uniswap",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 444,
                              "src": "2900:7:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_Uniswap_$444_$",
                                "typeString": "type(contract Uniswap)"
                              }
                            },
                            "id": 6312,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2900:106:10",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_Uniswap_$444",
                              "typeString": "contract Uniswap"
                            }
                          },
                          "src": "2890:116:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_Uniswap_$444",
                            "typeString": "contract Uniswap"
                          }
                        },
                        "id": 6314,
                        "nodeType": "ExpressionStatement",
                        "src": "2890:116:10"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 6319,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 6315,
                            "name": "GD",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6186,
                            "src": "3011:2:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_GoodDollar_$330",
                              "typeString": "contract GoodDollar"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 6317,
                                "name": "_gd",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6285,
                                "src": "3027:3:10",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 6316,
                              "name": "GoodDollar",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 330,
                              "src": "3016:10:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_GoodDollar_$330_$",
                                "typeString": "type(contract GoodDollar)"
                              }
                            },
                            "id": 6318,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3016:15:10",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_GoodDollar_$330",
                              "typeString": "contract GoodDollar"
                            }
                          },
                          "src": "3011:20:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_GoodDollar_$330",
                            "typeString": "contract GoodDollar"
                          }
                        },
                        "id": 6320,
                        "nodeType": "ExpressionStatement",
                        "src": "3011:20:10"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 6325,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 6321,
                            "name": "ubischeme",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6188,
                            "src": "3036:9:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_UBIScheme_$519",
                              "typeString": "contract UBIScheme"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 6323,
                                "name": "_ubischeme",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6287,
                                "src": "3058:10:10",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 6322,
                              "name": "UBIScheme",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 519,
                              "src": "3048:9:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_UBIScheme_$519_$",
                                "typeString": "type(contract UBIScheme)"
                              }
                            },
                            "id": 6324,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3048:21:10",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_UBIScheme_$519",
                              "typeString": "contract UBIScheme"
                            }
                          },
                          "src": "3036:33:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_UBIScheme_$519",
                            "typeString": "contract UBIScheme"
                          }
                        },
                        "id": 6326,
                        "nodeType": "ExpressionStatement",
                        "src": "3036:33:10"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 6333,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 6327,
                            "name": "uniswapFactory",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6190,
                            "src": "3075:14:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_UniswapFactory_$454",
                              "typeString": "contract UniswapFactory"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 6329,
                                    "name": "uniswap",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6184,
                                    "src": "3107:7:10",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_Uniswap_$444",
                                      "typeString": "contract Uniswap"
                                    }
                                  },
                                  "id": 6330,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "factory",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 410,
                                  "src": "3107:15:10",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_pure$__$returns$_t_address_$",
                                    "typeString": "function () pure external returns (address)"
                                  }
                                },
                                "id": 6331,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "3107:17:10",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 6328,
                              "name": "UniswapFactory",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 454,
                              "src": "3092:14:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_UniswapFactory_$454_$",
                                "typeString": "type(contract UniswapFactory)"
                              }
                            },
                            "id": 6332,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3092:33:10",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_UniswapFactory_$454",
                              "typeString": "contract UniswapFactory"
                            }
                          },
                          "src": "3075:50:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_UniswapFactory_$454",
                            "typeString": "contract UniswapFactory"
                          }
                        },
                        "id": 6334,
                        "nodeType": "ExpressionStatement",
                        "src": "3075:50:10"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 6345,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 6335,
                            "name": "uniswapPair",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6192,
                            "src": "3130:11:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_UniswapPair_$469",
                              "typeString": "contract UniswapPair"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "arguments": [],
                                    "expression": {
                                      "argumentTypes": [],
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 6339,
                                        "name": "uniswap",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6184,
                                        "src": "3184:7:10",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_contract$_Uniswap_$444",
                                          "typeString": "contract Uniswap"
                                        }
                                      },
                                      "id": 6340,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "WETH",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 405,
                                      "src": "3184:12:10",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_external_pure$__$returns$_t_address_$",
                                        "typeString": "function () pure external returns (address)"
                                      }
                                    },
                                    "id": 6341,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "3184:14:10",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 6342,
                                    "name": "_gd",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6285,
                                    "src": "3200:3:10",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 6337,
                                    "name": "uniswapFactory",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6190,
                                    "src": "3161:14:10",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_UniswapFactory_$454",
                                      "typeString": "contract UniswapFactory"
                                    }
                                  },
                                  "id": 6338,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "getPair",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 453,
                                  "src": "3161:22:10",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$returns$_t_address_$",
                                    "typeString": "function (address,address) view external returns (address)"
                                  }
                                },
                                "id": 6343,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "3161:43:10",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 6336,
                              "name": "UniswapPair",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 469,
                              "src": "3144:11:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_UniswapPair_$469_$",
                                "typeString": "type(contract UniswapPair)"
                              }
                            },
                            "id": 6344,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3144:65:10",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_UniswapPair_$469",
                              "typeString": "contract UniswapPair"
                            }
                          },
                          "src": "3130:79:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_UniswapPair_$469",
                            "typeString": "contract UniswapPair"
                          }
                        },
                        "id": 6346,
                        "nodeType": "ExpressionStatement",
                        "src": "3130:79:10"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 6347,
                            "name": "upgrade0",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6283,
                            "src": "3214:8:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                              "typeString": "function ()"
                            }
                          },
                          "id": 6348,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3214:10:10",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6349,
                        "nodeType": "ExpressionStatement",
                        "src": "3214:10:10"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": null,
            "functionSelector": "47a1671a",
            "id": 6353,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "upgrade1",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 6290,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6285,
                  "mutability": "mutable",
                  "name": "_gd",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6353,
                  "src": "2777:11:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6284,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2777:7:10",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6287,
                  "mutability": "mutable",
                  "name": "_ubischeme",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6353,
                  "src": "2792:18:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6286,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2792:7:10",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6289,
                  "mutability": "mutable",
                  "name": "_uniswap",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6353,
                  "src": "2814:16:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6288,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2814:7:10",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2773:60:10"
            },
            "returnParameters": {
              "id": 6291,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2841:0:10"
            },
            "scope": 7377,
            "src": "2756:476:10",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 6365,
              "nodeType": "Block",
              "src": "3282:32:10",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 6361,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "3307:1:10",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            }
                          ],
                          "id": 6360,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "3299:7:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 6359,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "3299:7:10",
                            "typeDescriptions": {
                              "typeIdentifier": null,
                              "typeString": null
                            }
                          }
                        },
                        "id": 6362,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3299:10:10",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "id": 6358,
                      "name": "stake",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        6366,
                        6461
                      ],
                      "referencedDeclaration": 6461,
                      "src": "3293:5:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$_t_bool_$",
                        "typeString": "function (address) returns (bool)"
                      }
                    },
                    "id": 6363,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3293:17:10",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 6357,
                  "id": 6364,
                  "nodeType": "Return",
                  "src": "3286:24:10"
                }
              ]
            },
            "documentation": null,
            "functionSelector": "3a4b66f1",
            "id": 6366,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "stake",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 6354,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3249:2:10"
            },
            "returnParameters": {
              "id": 6357,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6356,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6366,
                  "src": "3276:4:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 6355,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "3276:4:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3275:6:10"
            },
            "scope": 7377,
            "src": "3235:79:10",
            "stateMutability": "payable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 6460,
              "nodeType": "Block",
              "src": "3382:521:10",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 6377,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 6374,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "3394:3:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 6375,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "value",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "3394:9:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 6376,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "3406:1:10",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "3394:13:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "7374616b65206d757374206265203e2030",
                        "id": 6378,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3409:19:10",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_d643be80d2eeac28902a8588bd6b03a785ede3db490f389745a1589776aac4b9",
                          "typeString": "literal_string \"stake must be > 0\""
                        },
                        "value": "stake must be > 0"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_d643be80d2eeac28902a8588bd6b03a785ede3db490f389745a1589776aac4b9",
                          "typeString": "literal_string \"stake must be > 0\""
                        }
                      ],
                      "id": 6373,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "3386:7:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 6379,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3386:43:10",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6380,
                  "nodeType": "ExpressionStatement",
                  "src": "3386:43:10"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 6385,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 6382,
                            "name": "validators",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6180,
                            "src": "3441:10:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_address_$dyn_storage",
                              "typeString": "address[] storage ref"
                            }
                          },
                          "id": 6383,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "3441:17:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 6384,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "3461:1:10",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "3441:21:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "6e6f20617070726f7665642076616c696461746f7273",
                        "id": 6386,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3464:24:10",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_e67b2827f376c1cd6acc7a57dc272088230cbd854234d0d2a2421e53bbd0f1ff",
                          "typeString": "literal_string \"no approved validators\""
                        },
                        "value": "no approved validators"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_e67b2827f376c1cd6acc7a57dc272088230cbd854234d0d2a2421e53bbd0f1ff",
                          "typeString": "literal_string \"no approved validators\""
                        }
                      ],
                      "id": 6381,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "3433:7:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 6387,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3433:56:10",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6388,
                  "nodeType": "ExpressionStatement",
                  "src": "3433:56:10"
                },
                {
                  "assignments": [
                    6390
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 6390,
                      "mutability": "mutable",
                      "name": "found",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 6460,
                      "src": "3493:10:10",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 6389,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "3493:4:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 6391,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3493:10:10"
                },
                {
                  "body": {
                    "id": 6422,
                    "nodeType": "Block",
                    "src": "3596:77:10",
                    "statements": [
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 6414,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 6410,
                              "name": "validators",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6180,
                              "src": "3605:10:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_address_$dyn_storage",
                                "typeString": "address[] storage ref"
                              }
                            },
                            "id": 6412,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 6411,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6393,
                              "src": "3616:1:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "3605:13:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 6413,
                            "name": "_validator",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6368,
                            "src": "3622:10:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "3605:27:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 6421,
                        "nodeType": "IfStatement",
                        "src": "3601:68:10",
                        "trueBody": {
                          "id": 6420,
                          "nodeType": "Block",
                          "src": "3634:35:10",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 6417,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 6415,
                                  "name": "found",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6390,
                                  "src": "3640:5:10",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "hexValue": "74727565",
                                  "id": 6416,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "bool",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "3648:4:10",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  },
                                  "value": "true"
                                },
                                "src": "3640:12:10",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 6418,
                              "nodeType": "ExpressionStatement",
                              "src": "3640:12:10"
                            },
                            {
                              "id": 6419,
                              "nodeType": "Break",
                              "src": "3658:5:10"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 6406,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "id": 6401,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 6396,
                        "name": "_validator",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6368,
                        "src": "3534:10:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "!=",
                      "rightExpression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 6399,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "3556:1:10",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            }
                          ],
                          "id": 6398,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "3548:7:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 6397,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "3548:7:10",
                            "typeDescriptions": {
                              "typeIdentifier": null,
                              "typeString": null
                            }
                          }
                        },
                        "id": 6400,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3548:10:10",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      "src": "3534:24:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 6405,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 6402,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6393,
                        "src": "3562:1:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "<",
                      "rightExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 6403,
                          "name": "validators",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6180,
                          "src": "3566:10:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_$dyn_storage",
                            "typeString": "address[] storage ref"
                          }
                        },
                        "id": 6404,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "length",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "3566:17:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "3562:21:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "3534:49:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 6423,
                  "initializationExpression": {
                    "assignments": [
                      6393
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 6393,
                        "mutability": "mutable",
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 6423,
                        "src": "3516:9:10",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 6392,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3516:7:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 6395,
                    "initialValue": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 6394,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3528:1:10",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "3516:13:10"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 6408,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "3588:3:10",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 6407,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6393,
                        "src": "3588:1:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 6409,
                    "nodeType": "ExpressionStatement",
                    "src": "3588:3:10"
                  },
                  "nodeType": "ForStatement",
                  "src": "3507:166:10"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 6432,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 6430,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 6425,
                            "name": "_validator",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6368,
                            "src": "3688:10:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 6428,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "3710:1:10",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                }
                              ],
                              "id": 6427,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "3702:7:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 6426,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "3702:7:10",
                                "typeDescriptions": {
                                  "typeIdentifier": null,
                                  "typeString": null
                                }
                              }
                            },
                            "id": 6429,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3702:10:10",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          "src": "3688:24:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "||",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 6431,
                          "name": "found",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6390,
                          "src": "3716:5:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "3688:33:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "76616c696461746f72206e6f7420696e20617070726f766564206c697374",
                        "id": 6433,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3726:32:10",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_ec996bb6370a70d3201c5fcf446442917423f96aa5e12b18280020833d5b0cc5",
                          "typeString": "literal_string \"validator not in approved list\""
                        },
                        "value": "validator not in approved list"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_ec996bb6370a70d3201c5fcf446442917423f96aa5e12b18280020833d5b0cc5",
                          "typeString": "literal_string \"validator not in approved list\""
                        }
                      ],
                      "id": 6424,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "3676:7:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 6434,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3676:86:10",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6435,
                  "nodeType": "ExpressionStatement",
                  "src": "3676:86:10"
                },
                {
                  "assignments": [
                    6437
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 6437,
                      "mutability": "mutable",
                      "name": "staked",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 6460,
                      "src": "3767:11:10",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 6436,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "3767:4:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 6443,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 6439,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "3800:3:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 6440,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "value",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "3800:9:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6441,
                        "name": "_validator",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6368,
                        "src": "3811:10:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 6438,
                      "name": "stakeNextValidator",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6760,
                      "src": "3781:18:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_address_$returns$_t_bool_$",
                        "typeString": "function (uint256,address) returns (bool)"
                      }
                    },
                    "id": 6442,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3781:41:10",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3767:55:10"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 6456,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 6444,
                        "name": "stakers",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6177,
                        "src": "3826:7:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 6447,
                      "indexExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 6445,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "3834:3:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 6446,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "3834:10:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "3826:19:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 6453,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "3872:3:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 6454,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "value",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "3872:9:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 6448,
                            "name": "stakers",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6177,
                            "src": "3848:7:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 6451,
                          "indexExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 6449,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -15,
                              "src": "3856:3:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 6450,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "3856:10:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "3848:19:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 6452,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "add",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7973,
                        "src": "3848:23:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                          "typeString": "function (uint256,uint256) pure returns (uint256)"
                        }
                      },
                      "id": 6455,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "3848:34:10",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3826:56:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 6457,
                  "nodeType": "ExpressionStatement",
                  "src": "3826:56:10"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 6458,
                    "name": "staked",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 6437,
                    "src": "3893:6:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 6372,
                  "id": 6459,
                  "nodeType": "Return",
                  "src": "3886:13:10"
                }
              ]
            },
            "documentation": null,
            "functionSelector": "26476204",
            "id": 6461,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "stake",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 6369,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6368,
                  "mutability": "mutable",
                  "name": "_validator",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6461,
                  "src": "3332:18:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6367,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3332:7:10",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3331:20:10"
            },
            "returnParameters": {
              "id": 6372,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6371,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6461,
                  "src": "3376:4:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 6370,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "3376:4:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3375:6:10"
            },
            "scope": 7377,
            "src": "3317:586:10",
            "stateMutability": "payable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 6472,
              "nodeType": "Block",
              "src": "3971:30:10",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 6468,
                      "name": "stakers",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6177,
                      "src": "3982:7:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                        "typeString": "mapping(address => uint256)"
                      }
                    },
                    "id": 6470,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 6469,
                      "name": "_owner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6463,
                      "src": "3990:6:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "3982:15:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 6467,
                  "id": 6471,
                  "nodeType": "Return",
                  "src": "3975:22:10"
                }
              ]
            },
            "documentation": null,
            "functionSelector": "70a08231",
            "id": 6473,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "balanceOf",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 6464,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6463,
                  "mutability": "mutable",
                  "name": "_owner",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6473,
                  "src": "3925:14:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6462,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3925:7:10",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3924:16:10"
            },
            "returnParameters": {
              "id": 6467,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6466,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6473,
                  "src": "3962:7:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 6465,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3962:7:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3961:9:10"
            },
            "scope": 7377,
            "src": "3906:95:10",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 6638,
              "nodeType": "Block",
              "src": "4063:1102:10",
              "statements": [
                {
                  "assignments": [
                    6481
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 6481,
                      "mutability": "mutable",
                      "name": "effectiveBalance",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 6638,
                      "src": "4067:24:10",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 6480,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "4067:7:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 6484,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 6482,
                      "name": "balance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7372,
                      "src": "4094:7:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                        "typeString": "function () view returns (uint256)"
                      }
                    },
                    "id": 6483,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4094:9:10",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4067:36:10"
                },
                {
                  "assignments": [
                    6486
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 6486,
                      "mutability": "mutable",
                      "name": "toWithdraw",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 6638,
                      "src": "4136:18:10",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 6485,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "4136:7:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 6496,
                  "initialValue": {
                    "argumentTypes": null,
                    "condition": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 6489,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 6487,
                        "name": "_value",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6475,
                        "src": "4157:6:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 6488,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4167:1:10",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "4157:11:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseExpression": {
                      "argumentTypes": null,
                      "id": 6494,
                      "name": "_value",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6475,
                      "src": "4193:6:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 6495,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "Conditional",
                    "src": "4157:42:10",
                    "trueExpression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 6490,
                        "name": "stakers",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6177,
                        "src": "4171:7:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 6493,
                      "indexExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 6491,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "4179:3:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 6492,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "4179:10:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "4171:19:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4136:63:10"
                },
                {
                  "assignments": [
                    6498
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 6498,
                      "mutability": "mutable",
                      "name": "toCollect",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 6638,
                      "src": "4203:17:10",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 6497,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "4203:7:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 6500,
                  "initialValue": {
                    "argumentTypes": null,
                    "id": 6499,
                    "name": "toWithdraw",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 6486,
                    "src": "4223:10:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4203:30:10"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 6511,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 6504,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 6502,
                            "name": "toWithdraw",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6486,
                            "src": "4249:10:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 6503,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "4262:1:10",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "4249:14:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 6510,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 6505,
                            "name": "toWithdraw",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6486,
                            "src": "4267:10:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 6506,
                              "name": "stakers",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6177,
                              "src": "4281:7:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 6509,
                            "indexExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 6507,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "4289:3:10",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 6508,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "4289:10:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "4281:19:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "4267:33:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "4249:51:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "696e76616c696420776974686472617720616d6f756e74",
                        "id": 6512,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4305:25:10",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_91fdcc465f3afd13a51e62c6ab234d15462a30e209c50104aaf3218361cd1f64",
                          "typeString": "literal_string \"invalid withdraw amount\""
                        },
                        "value": "invalid withdraw amount"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_91fdcc465f3afd13a51e62c6ab234d15462a30e209c50104aaf3218361cd1f64",
                          "typeString": "literal_string \"invalid withdraw amount\""
                        }
                      ],
                      "id": 6501,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "4237:7:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 6513,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4237:97:10",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6514,
                  "nodeType": "ExpressionStatement",
                  "src": "4237:97:10"
                },
                {
                  "assignments": [
                    6516
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 6516,
                      "mutability": "mutable",
                      "name": "perValidator",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 6638,
                      "src": "4338:20:10",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 6515,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "4338:7:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 6522,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 6519,
                          "name": "validators",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6180,
                          "src": "4372:10:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_$dyn_storage",
                            "typeString": "address[] storage ref"
                          }
                        },
                        "id": 6520,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "length",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "4372:17:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 6517,
                        "name": "_value",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6475,
                        "src": "4361:6:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 6518,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "div",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 8070,
                      "src": "4361:10:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 6521,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4361:29:10",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4338:52:10"
                },
                {
                  "body": {
                    "id": 6591,
                    "nodeType": "Block",
                    "src": "4442:367:10",
                    "statements": [
                      {
                        "assignments": [
                          6535
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 6535,
                            "mutability": "mutable",
                            "name": "cur",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 6591,
                            "src": "4447:11:10",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 6534,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "4447:7:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 6546,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 6540,
                                  "name": "this",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -28,
                                  "src": "4499:4:10",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_FuseStakingV3_$7377",
                                    "typeString": "contract FuseStakingV3"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_FuseStakingV3_$7377",
                                    "typeString": "contract FuseStakingV3"
                                  }
                                ],
                                "id": 6539,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "4491:7:10",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 6538,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "4491:7:10",
                                  "typeDescriptions": {
                                    "typeIdentifier": null,
                                    "typeString": null
                                  }
                                }
                              },
                              "id": 6541,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "4491:13:10",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 6542,
                                "name": "validators",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6180,
                                "src": "4506:10:10",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_address_$dyn_storage",
                                  "typeString": "address[] storage ref"
                                }
                              },
                              "id": 6544,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 6543,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6524,
                                "src": "4517:1:10",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "4506:13:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 6536,
                              "name": "consensus",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6182,
                              "src": "4465:9:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IConsensus_$6164",
                                "typeString": "contract IConsensus"
                              }
                            },
                            "id": 6537,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "delegatedAmount",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 6156,
                            "src": "4465:25:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$",
                              "typeString": "function (address,address) view external returns (uint256)"
                            }
                          },
                          "id": 6545,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4465:55:10",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "4447:73:10"
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 6549,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 6547,
                            "name": "cur",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6535,
                            "src": "4529:3:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 6548,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "4536:1:10",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "4529:8:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 6551,
                        "nodeType": "IfStatement",
                        "src": "4525:22:10",
                        "trueBody": {
                          "id": 6550,
                          "nodeType": "Continue",
                          "src": "4539:8:10"
                        }
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 6554,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 6552,
                            "name": "cur",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6535,
                            "src": "4556:3:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 6553,
                            "name": "perValidator",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6516,
                            "src": "4563:12:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "4556:19:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 6584,
                          "nodeType": "Block",
                          "src": "4670:105:10",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "baseExpression": {
                                      "argumentTypes": null,
                                      "id": 6571,
                                      "name": "validators",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6180,
                                      "src": "4696:10:10",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_address_$dyn_storage",
                                        "typeString": "address[] storage ref"
                                      }
                                    },
                                    "id": 6573,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "id": 6572,
                                      "name": "i",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6524,
                                      "src": "4707:1:10",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "4696:13:10",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 6574,
                                    "name": "perValidator",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6516,
                                    "src": "4711:12:10",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 6570,
                                  "name": "undelegateWithCatch",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7357,
                                  "src": "4676:19:10",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                                    "typeString": "function (address,uint256) returns (bool)"
                                  }
                                },
                                "id": 6575,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "4676:48:10",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 6576,
                              "nodeType": "ExpressionStatement",
                              "src": "4676:48:10"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 6582,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 6577,
                                  "name": "toCollect",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6498,
                                  "src": "4730:9:10",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 6580,
                                      "name": "perValidator",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6516,
                                      "src": "4756:12:10",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 6578,
                                      "name": "toCollect",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6498,
                                      "src": "4742:9:10",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 6579,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "sub",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 7990,
                                    "src": "4742:13:10",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                      "typeString": "function (uint256,uint256) pure returns (uint256)"
                                    }
                                  },
                                  "id": 6581,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "4742:27:10",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "4730:39:10",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 6583,
                              "nodeType": "ExpressionStatement",
                              "src": "4730:39:10"
                            }
                          ]
                        },
                        "id": 6585,
                        "nodeType": "IfStatement",
                        "src": "4552:223:10",
                        "trueBody": {
                          "id": 6569,
                          "nodeType": "Block",
                          "src": "4577:87:10",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "baseExpression": {
                                      "argumentTypes": null,
                                      "id": 6556,
                                      "name": "validators",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6180,
                                      "src": "4603:10:10",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_address_$dyn_storage",
                                        "typeString": "address[] storage ref"
                                      }
                                    },
                                    "id": 6558,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "id": 6557,
                                      "name": "i",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6524,
                                      "src": "4614:1:10",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "4603:13:10",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 6559,
                                    "name": "cur",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6535,
                                    "src": "4618:3:10",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 6555,
                                  "name": "undelegateWithCatch",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7357,
                                  "src": "4583:19:10",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                                    "typeString": "function (address,uint256) returns (bool)"
                                  }
                                },
                                "id": 6560,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "4583:39:10",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 6561,
                              "nodeType": "ExpressionStatement",
                              "src": "4583:39:10"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 6567,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 6562,
                                  "name": "toCollect",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6498,
                                  "src": "4628:9:10",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 6565,
                                      "name": "cur",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6535,
                                      "src": "4654:3:10",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 6563,
                                      "name": "toCollect",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6498,
                                      "src": "4640:9:10",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 6564,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "sub",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 7990,
                                    "src": "4640:13:10",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                      "typeString": "function (uint256,uint256) pure returns (uint256)"
                                    }
                                  },
                                  "id": 6566,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "4640:18:10",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "4628:30:10",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 6568,
                              "nodeType": "ExpressionStatement",
                              "src": "4628:30:10"
                            }
                          ]
                        }
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 6588,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 6586,
                            "name": "toCollect",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6498,
                            "src": "4783:9:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 6587,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "4796:1:10",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "4783:14:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 6590,
                        "nodeType": "IfStatement",
                        "src": "4779:25:10",
                        "trueBody": {
                          "id": 6589,
                          "nodeType": "Break",
                          "src": "4799:5:10"
                        }
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 6530,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 6527,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6524,
                      "src": "4414:1:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 6528,
                        "name": "validators",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6180,
                        "src": "4418:10:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_storage",
                          "typeString": "address[] storage ref"
                        }
                      },
                      "id": 6529,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "4418:17:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "4414:21:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 6592,
                  "initializationExpression": {
                    "assignments": [
                      6524
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 6524,
                        "mutability": "mutable",
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 6592,
                        "src": "4399:9:10",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 6523,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4399:7:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 6526,
                    "initialValue": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 6525,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "4411:1:10",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "4399:13:10"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 6532,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "4437:3:10",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 6531,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6524,
                        "src": "4437:1:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 6533,
                    "nodeType": "ExpressionStatement",
                    "src": "4437:3:10"
                  },
                  "nodeType": "ForStatement",
                  "src": "4394:415:10"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 6599,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 6593,
                      "name": "effectiveBalance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6481,
                      "src": "4813:16:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 6597,
                          "name": "effectiveBalance",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6481,
                          "src": "4846:16:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 6594,
                            "name": "balance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7372,
                            "src": "4832:7:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                              "typeString": "function () view returns (uint256)"
                            }
                          },
                          "id": 6595,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4832:9:10",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 6596,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sub",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7990,
                        "src": "4832:13:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                          "typeString": "function (uint256,uint256) pure returns (uint256)"
                        }
                      },
                      "id": 6598,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "4832:31:10",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "4813:50:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 6600,
                  "nodeType": "ExpressionStatement",
                  "src": "4813:50:10"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 6603,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 6601,
                      "name": "toWithdraw",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6486,
                      "src": "4945:10:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 6602,
                      "name": "effectiveBalance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6481,
                      "src": "4958:16:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "4945:29:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 6609,
                  "nodeType": "IfStatement",
                  "src": "4941:74:10",
                  "trueBody": {
                    "id": 6608,
                    "nodeType": "Block",
                    "src": "4976:39:10",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 6606,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 6604,
                            "name": "toWithdraw",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6486,
                            "src": "4981:10:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 6605,
                            "name": "effectiveBalance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6481,
                            "src": "4994:16:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "4981:29:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 6607,
                        "nodeType": "ExpressionStatement",
                        "src": "4981:29:10"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 6621,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 6610,
                        "name": "stakers",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6177,
                        "src": "5019:7:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 6613,
                      "indexExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 6611,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "5027:3:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 6612,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "5027:10:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "5019:19:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 6619,
                          "name": "toWithdraw",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6486,
                          "src": "5065:10:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 6614,
                            "name": "stakers",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6177,
                            "src": "5041:7:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 6617,
                          "indexExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 6615,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -15,
                              "src": "5049:3:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 6616,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "5049:10:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "5041:19:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 6618,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sub",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7990,
                        "src": "5041:23:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                          "typeString": "function (uint256,uint256) pure returns (uint256)"
                        }
                      },
                      "id": 6620,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "5041:35:10",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "5019:57:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 6622,
                  "nodeType": "ExpressionStatement",
                  "src": "5019:57:10"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 6625,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 6623,
                      "name": "toWithdraw",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6486,
                      "src": "5084:10:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 6624,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "5097:1:10",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "5084:14:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 6635,
                  "nodeType": "IfStatement",
                  "src": "5080:60:10",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 6632,
                          "name": "toWithdraw",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6486,
                          "src": "5129:10:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 6628,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "5108:3:10",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 6629,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "5108:10:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            ],
                            "id": 6627,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "5100:8:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_payable_$",
                              "typeString": "type(address payable)"
                            },
                            "typeName": {
                              "id": 6626,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "5100:8:10",
                              "stateMutability": "payable",
                              "typeDescriptions": {
                                "typeIdentifier": null,
                                "typeString": null
                              }
                            }
                          },
                          "id": 6630,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5100:19:10",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "id": 6631,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "transfer",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "5100:28:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_transfer_nonpayable$_t_uint256_$returns$__$",
                          "typeString": "function (uint256)"
                        }
                      },
                      "id": 6633,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "5100:40:10",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 6634,
                    "nodeType": "ExpressionStatement",
                    "src": "5100:40:10"
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 6636,
                    "name": "toWithdraw",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 6486,
                    "src": "5151:10:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 6479,
                  "id": 6637,
                  "nodeType": "Return",
                  "src": "5144:17:10"
                }
              ]
            },
            "documentation": null,
            "functionSelector": "2e1a7d4d",
            "id": 6639,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "withdraw",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 6476,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6475,
                  "mutability": "mutable",
                  "name": "_value",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6639,
                  "src": "4022:14:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 6474,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4022:7:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4021:16:10"
            },
            "returnParameters": {
              "id": 6479,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6478,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6639,
                  "src": "4054:7:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 6477,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4054:7:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4053:9:10"
            },
            "scope": 7377,
            "src": "4004:1161:10",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 6759,
              "nodeType": "Block",
              "src": "5261:655:10",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 6651,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 6648,
                        "name": "validators",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6180,
                        "src": "5269:10:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_storage",
                          "typeString": "address[] storage ref"
                        }
                      },
                      "id": 6649,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "5269:17:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 6650,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "5290:1:10",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "5269:22:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 6654,
                  "nodeType": "IfStatement",
                  "src": "5265:40:10",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "hexValue": "66616c7365",
                      "id": 6652,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "5300:5:10",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "false"
                    },
                    "functionReturnParameters": 6647,
                    "id": 6653,
                    "nodeType": "Return",
                    "src": "5293:12:10"
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 6660,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 6655,
                      "name": "_validator",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6643,
                      "src": "5313:10:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 6658,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "5335:1:10",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          }
                        ],
                        "id": 6657,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "5327:7:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": {
                          "id": 6656,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "5327:7:10",
                          "typeDescriptions": {
                            "typeIdentifier": null,
                            "typeString": null
                          }
                        }
                      },
                      "id": 6659,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "5327:10:10",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "5313:24:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 6672,
                  "nodeType": "IfStatement",
                  "src": "5309:103:10",
                  "trueBody": {
                    "id": 6671,
                    "nodeType": "Block",
                    "src": "5339:73:10",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 6666,
                              "name": "_validator",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6643,
                              "src": "5380:10:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 6661,
                                "name": "consensus",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6182,
                                "src": "5344:9:10",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_IConsensus_$6164",
                                  "typeString": "contract IConsensus"
                                }
                              },
                              "id": 6663,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "delegate",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 6139,
                              "src": "5344:18:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_payable$_t_address_$returns$__$",
                                "typeString": "function (address) payable external"
                              }
                            },
                            "id": 6665,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "names": [
                              "value"
                            ],
                            "nodeType": "FunctionCallOptions",
                            "options": [
                              {
                                "argumentTypes": null,
                                "id": 6664,
                                "name": "_value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6641,
                                "src": "5371:6:10",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "src": "5344:35:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_payable$_t_address_$returns$__$value",
                              "typeString": "function (address) payable external"
                            }
                          },
                          "id": 6667,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5344:47:10",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6668,
                        "nodeType": "ExpressionStatement",
                        "src": "5344:47:10"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "74727565",
                          "id": 6669,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "5403:4:10",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        },
                        "functionReturnParameters": 6647,
                        "id": 6670,
                        "nodeType": "Return",
                        "src": "5396:11:10"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    6674
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 6674,
                      "mutability": "mutable",
                      "name": "perValidator",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 6759,
                      "src": "5416:20:10",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 6673,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "5416:7:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 6684,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 6681,
                          "name": "validators",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6180,
                          "src": "5475:10:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_$dyn_storage",
                            "typeString": "address[] storage ref"
                          }
                        },
                        "id": 6682,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "length",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "5475:17:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 6678,
                            "name": "_value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6641,
                            "src": "5463:6:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 6675,
                              "name": "totalDelegated",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6819,
                              "src": "5442:14:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                                "typeString": "function () view returns (uint256)"
                              }
                            },
                            "id": 6676,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "5442:16:10",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 6677,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "add",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 7973,
                          "src": "5442:20:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                            "typeString": "function (uint256,uint256) pure returns (uint256)"
                          }
                        },
                        "id": 6679,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5442:28:10",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 6680,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "div",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 8070,
                      "src": "5442:32:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 6683,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5442:51:10",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5416:77:10"
                },
                {
                  "assignments": [
                    6686
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 6686,
                      "mutability": "mutable",
                      "name": "left",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 6759,
                      "src": "5497:12:10",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 6685,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "5497:7:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 6688,
                  "initialValue": {
                    "argumentTypes": null,
                    "id": 6687,
                    "name": "_value",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 6641,
                    "src": "5512:6:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5497:21:10"
                },
                {
                  "body": {
                    "id": 6755,
                    "nodeType": "Block",
                    "src": "5582:315:10",
                    "statements": [
                      {
                        "assignments": [
                          6705
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 6705,
                            "mutability": "mutable",
                            "name": "cur",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 6755,
                            "src": "5587:11:10",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 6704,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "5587:7:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 6716,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 6710,
                                  "name": "this",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -28,
                                  "src": "5639:4:10",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_FuseStakingV3_$7377",
                                    "typeString": "contract FuseStakingV3"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_FuseStakingV3_$7377",
                                    "typeString": "contract FuseStakingV3"
                                  }
                                ],
                                "id": 6709,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "5631:7:10",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 6708,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "5631:7:10",
                                  "typeDescriptions": {
                                    "typeIdentifier": null,
                                    "typeString": null
                                  }
                                }
                              },
                              "id": 6711,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "5631:13:10",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 6712,
                                "name": "validators",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6180,
                                "src": "5646:10:10",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_address_$dyn_storage",
                                  "typeString": "address[] storage ref"
                                }
                              },
                              "id": 6714,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 6713,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6690,
                                "src": "5657:1:10",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "5646:13:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 6706,
                              "name": "consensus",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6182,
                              "src": "5605:9:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IConsensus_$6164",
                                "typeString": "contract IConsensus"
                              }
                            },
                            "id": 6707,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "delegatedAmount",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 6156,
                            "src": "5605:25:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$",
                              "typeString": "function (address,address) view external returns (uint256)"
                            }
                          },
                          "id": 6715,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5605:55:10",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "5587:73:10"
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 6719,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 6717,
                            "name": "cur",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6705,
                            "src": "5670:3:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 6718,
                            "name": "perValidator",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6674,
                            "src": "5676:12:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "5670:18:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 6754,
                        "nodeType": "IfStatement",
                        "src": "5666:227:10",
                        "trueBody": {
                          "id": 6753,
                          "nodeType": "Block",
                          "src": "5690:203:10",
                          "statements": [
                            {
                              "assignments": [
                                6721
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 6721,
                                  "mutability": "mutable",
                                  "name": "toDelegate",
                                  "nodeType": "VariableDeclaration",
                                  "overrides": null,
                                  "scope": 6753,
                                  "src": "5696:18:10",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "typeName": {
                                    "id": 6720,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "5696:7:10",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                }
                              ],
                              "id": 6726,
                              "initialValue": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 6724,
                                    "name": "cur",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6705,
                                    "src": "5734:3:10",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 6722,
                                    "name": "perValidator",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6674,
                                    "src": "5717:12:10",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 6723,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "sub",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 7990,
                                  "src": "5717:16:10",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                    "typeString": "function (uint256,uint256) pure returns (uint256)"
                                  }
                                },
                                "id": 6725,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "5717:21:10",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "5696:42:10"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 6734,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 6727,
                                  "name": "toDelegate",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6721,
                                  "src": "5744:10:10",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "condition": {
                                    "argumentTypes": null,
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 6730,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "argumentTypes": null,
                                      "id": 6728,
                                      "name": "toDelegate",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6721,
                                      "src": "5757:10:10",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "<",
                                    "rightExpression": {
                                      "argumentTypes": null,
                                      "id": 6729,
                                      "name": "left",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6686,
                                      "src": "5770:4:10",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "5757:17:10",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  "falseExpression": {
                                    "argumentTypes": null,
                                    "id": 6732,
                                    "name": "left",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6686,
                                    "src": "5790:4:10",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 6733,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "Conditional",
                                  "src": "5757:37:10",
                                  "trueExpression": {
                                    "argumentTypes": null,
                                    "id": 6731,
                                    "name": "toDelegate",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6721,
                                    "src": "5777:10:10",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "5744:50:10",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 6735,
                              "nodeType": "ExpressionStatement",
                              "src": "5744:50:10"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "baseExpression": {
                                      "argumentTypes": null,
                                      "id": 6741,
                                      "name": "validators",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6180,
                                      "src": "5840:10:10",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_address_$dyn_storage",
                                        "typeString": "address[] storage ref"
                                      }
                                    },
                                    "id": 6743,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "id": 6742,
                                      "name": "i",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6690,
                                      "src": "5851:1:10",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "5840:13:10",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 6736,
                                      "name": "consensus",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6182,
                                      "src": "5800:9:10",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_IConsensus_$6164",
                                        "typeString": "contract IConsensus"
                                      }
                                    },
                                    "id": 6738,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "delegate",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 6139,
                                    "src": "5800:18:10",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_external_payable$_t_address_$returns$__$",
                                      "typeString": "function (address) payable external"
                                    }
                                  },
                                  "id": 6740,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "names": [
                                    "value"
                                  ],
                                  "nodeType": "FunctionCallOptions",
                                  "options": [
                                    {
                                      "argumentTypes": null,
                                      "id": 6739,
                                      "name": "toDelegate",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6721,
                                      "src": "5827:10:10",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "src": "5800:39:10",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_payable$_t_address_$returns$__$value",
                                    "typeString": "function (address) payable external"
                                  }
                                },
                                "id": 6744,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "5800:54:10",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 6745,
                              "nodeType": "ExpressionStatement",
                              "src": "5800:54:10"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 6751,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 6746,
                                  "name": "left",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6686,
                                  "src": "5860:4:10",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 6749,
                                      "name": "toDelegate",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6721,
                                      "src": "5876:10:10",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 6747,
                                      "name": "left",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6686,
                                      "src": "5867:4:10",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 6748,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "sub",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 7990,
                                    "src": "5867:8:10",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                      "typeString": "function (uint256,uint256) pure returns (uint256)"
                                    }
                                  },
                                  "id": 6750,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "5867:20:10",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "5860:27:10",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 6752,
                              "nodeType": "ExpressionStatement",
                              "src": "5860:27:10"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 6700,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 6696,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 6693,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6690,
                        "src": "5542:1:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "<",
                      "rightExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 6694,
                          "name": "validators",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6180,
                          "src": "5546:10:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_$dyn_storage",
                            "typeString": "address[] storage ref"
                          }
                        },
                        "id": 6695,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "length",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "5546:17:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "5542:21:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 6699,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 6697,
                        "name": "left",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6686,
                        "src": "5567:4:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": ">",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 6698,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "5574:1:10",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "5567:8:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "5542:33:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 6756,
                  "initializationExpression": {
                    "assignments": [
                      6690
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 6690,
                        "mutability": "mutable",
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 6756,
                        "src": "5527:9:10",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 6689,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5527:7:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 6692,
                    "initialValue": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 6691,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "5539:1:10",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "5527:13:10"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 6702,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "5577:3:10",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 6701,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6690,
                        "src": "5577:1:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 6703,
                    "nodeType": "ExpressionStatement",
                    "src": "5577:3:10"
                  },
                  "nodeType": "ForStatement",
                  "src": "5522:375:10"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 6757,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "5908:4:10",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 6647,
                  "id": 6758,
                  "nodeType": "Return",
                  "src": "5901:11:10"
                }
              ]
            },
            "documentation": null,
            "id": 6760,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "stakeNextValidator",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 6644,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6641,
                  "mutability": "mutable",
                  "name": "_value",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6760,
                  "src": "5196:14:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 6640,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5196:7:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6643,
                  "mutability": "mutable",
                  "name": "_validator",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6760,
                  "src": "5212:18:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6642,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5212:7:10",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5195:36:10"
            },
            "returnParameters": {
              "id": 6647,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6646,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6760,
                  "src": "5254:4:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 6645,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "5254:4:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5253:6:10"
            },
            "scope": 7377,
            "src": "5168:748:10",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 6773,
              "nodeType": "Block",
              "src": "5970:27:10",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 6770,
                        "name": "_v",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6762,
                        "src": "5990:2:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 6767,
                        "name": "validators",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6180,
                        "src": "5974:10:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_storage",
                          "typeString": "address[] storage ref"
                        }
                      },
                      "id": 6769,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "push",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "5974:15:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_arraypush_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 6771,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5974:19:10",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6772,
                  "nodeType": "ExpressionStatement",
                  "src": "5974:19:10"
                }
              ]
            },
            "documentation": null,
            "functionSelector": "4d238c8e",
            "id": 6774,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 6765,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 6764,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 7818,
                  "src": "5960:9:10",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "5960:9:10"
              }
            ],
            "name": "addValidator",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 6763,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6762,
                  "mutability": "mutable",
                  "name": "_v",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6774,
                  "src": "5941:10:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6761,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5941:7:10",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5940:12:10"
            },
            "returnParameters": {
              "id": 6766,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5970:0:10"
            },
            "scope": 7377,
            "src": "5919:78:10",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 6818,
              "nodeType": "Block",
              "src": "6056:202:10",
              "statements": [
                {
                  "assignments": [
                    6780
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 6780,
                      "mutability": "mutable",
                      "name": "total",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 6818,
                      "src": "6060:13:10",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 6779,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "6060:7:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 6782,
                  "initialValue": {
                    "argumentTypes": null,
                    "hexValue": "30",
                    "id": 6781,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "6076:1:10",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_0_by_1",
                      "typeString": "int_const 0"
                    },
                    "value": "0"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6060:17:10"
                },
                {
                  "body": {
                    "id": 6814,
                    "nodeType": "Block",
                    "src": "6129:110:10",
                    "statements": [
                      {
                        "assignments": [
                          6795
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 6795,
                            "mutability": "mutable",
                            "name": "cur",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 6814,
                            "src": "6134:11:10",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 6794,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "6134:7:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 6806,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 6800,
                                  "name": "this",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -28,
                                  "src": "6186:4:10",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_FuseStakingV3_$7377",
                                    "typeString": "contract FuseStakingV3"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_FuseStakingV3_$7377",
                                    "typeString": "contract FuseStakingV3"
                                  }
                                ],
                                "id": 6799,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "6178:7:10",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 6798,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "6178:7:10",
                                  "typeDescriptions": {
                                    "typeIdentifier": null,
                                    "typeString": null
                                  }
                                }
                              },
                              "id": 6801,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "6178:13:10",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 6802,
                                "name": "validators",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6180,
                                "src": "6193:10:10",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_address_$dyn_storage",
                                  "typeString": "address[] storage ref"
                                }
                              },
                              "id": 6804,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 6803,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6784,
                                "src": "6204:1:10",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "6193:13:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 6796,
                              "name": "consensus",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6182,
                              "src": "6152:9:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IConsensus_$6164",
                                "typeString": "contract IConsensus"
                              }
                            },
                            "id": 6797,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "delegatedAmount",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 6156,
                            "src": "6152:25:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$",
                              "typeString": "function (address,address) view external returns (uint256)"
                            }
                          },
                          "id": 6805,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6152:55:10",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "6134:73:10"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 6812,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 6807,
                            "name": "total",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6780,
                            "src": "6212:5:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 6810,
                                "name": "cur",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6795,
                                "src": "6230:3:10",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 6808,
                                "name": "total",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6780,
                                "src": "6220:5:10",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 6809,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "add",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 7973,
                              "src": "6220:9:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 6811,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "6220:14:10",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "6212:22:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 6813,
                        "nodeType": "ExpressionStatement",
                        "src": "6212:22:10"
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 6790,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 6787,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6784,
                      "src": "6101:1:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 6788,
                        "name": "validators",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6180,
                        "src": "6105:10:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_storage",
                          "typeString": "address[] storage ref"
                        }
                      },
                      "id": 6789,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "6105:17:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "6101:21:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 6815,
                  "initializationExpression": {
                    "assignments": [
                      6784
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 6784,
                        "mutability": "mutable",
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 6815,
                        "src": "6086:9:10",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 6783,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "6086:7:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 6786,
                    "initialValue": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 6785,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "6098:1:10",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "6086:13:10"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 6792,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "6124:3:10",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 6791,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6784,
                        "src": "6124:1:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 6793,
                    "nodeType": "ExpressionStatement",
                    "src": "6124:3:10"
                  },
                  "nodeType": "ForStatement",
                  "src": "6081:158:10"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 6816,
                    "name": "total",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 6780,
                    "src": "6249:5:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 6778,
                  "id": 6817,
                  "nodeType": "Return",
                  "src": "6242:12:10"
                }
              ]
            },
            "documentation": null,
            "functionSelector": "80d04de8",
            "id": 6819,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "totalDelegated",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 6775,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6023:2:10"
            },
            "returnParameters": {
              "id": 6778,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6777,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6819,
                  "src": "6047:7:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 6776,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6047:7:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6046:9:10"
            },
            "scope": 7377,
            "src": "6000:258:10",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 6903,
              "nodeType": "Block",
              "src": "6323:592:10",
              "statements": [
                {
                  "assignments": [
                    6827
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 6827,
                      "mutability": "mutable",
                      "name": "delegated",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 6903,
                      "src": "6327:17:10",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 6826,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "6327:7:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 6836,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 6832,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -28,
                            "src": "6384:4:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_FuseStakingV3_$7377",
                              "typeString": "contract FuseStakingV3"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_FuseStakingV3_$7377",
                              "typeString": "contract FuseStakingV3"
                            }
                          ],
                          "id": 6831,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "6376:7:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 6830,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "6376:7:10",
                            "typeDescriptions": {
                              "typeIdentifier": null,
                              "typeString": null
                            }
                          }
                        },
                        "id": 6833,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "6376:13:10",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6834,
                        "name": "_validator",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6821,
                        "src": "6391:10:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 6828,
                        "name": "consensus",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6182,
                        "src": "6350:9:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IConsensus_$6164",
                          "typeString": "contract IConsensus"
                        }
                      },
                      "id": 6829,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "delegatedAmount",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6156,
                      "src": "6350:25:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$",
                        "typeString": "function (address,address) view external returns (uint256)"
                      }
                    },
                    "id": 6835,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6350:52:10",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6327:75:10"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 6839,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 6837,
                      "name": "delegated",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6827,
                      "src": "6410:9:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 6838,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "6422:1:10",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "6410:13:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 6858,
                  "nodeType": "IfStatement",
                  "src": "6406:282:10",
                  "trueBody": {
                    "id": 6857,
                    "nodeType": "Block",
                    "src": "6425:263:10",
                    "statements": [
                      {
                        "assignments": [
                          6841
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 6841,
                            "mutability": "mutable",
                            "name": "prevBalance",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 6857,
                            "src": "6430:19:10",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 6840,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "6430:7:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 6844,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 6842,
                            "name": "balance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7372,
                            "src": "6452:7:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                              "typeString": "function () view returns (uint256)"
                            }
                          },
                          "id": 6843,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6452:9:10",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "6430:31:10"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 6846,
                              "name": "_validator",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6821,
                              "src": "6486:10:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 6847,
                              "name": "delegated",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6827,
                              "src": "6498:9:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 6845,
                            "name": "undelegateWithCatch",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7357,
                            "src": "6466:19:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                              "typeString": "function (address,uint256) returns (bool)"
                            }
                          },
                          "id": 6848,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6466:42:10",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 6849,
                        "nodeType": "ExpressionStatement",
                        "src": "6466:42:10"
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 6853,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 6850,
                              "name": "balance",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7372,
                              "src": "6597:7:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                                "typeString": "function () view returns (uint256)"
                              }
                            },
                            "id": 6851,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "6597:9:10",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 6852,
                            "name": "prevBalance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6841,
                            "src": "6610:11:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "6597:24:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 6856,
                        "nodeType": "IfStatement",
                        "src": "6593:91:10",
                        "trueBody": {
                          "id": 6855,
                          "nodeType": "Block",
                          "src": "6623:61:10",
                          "statements": [
                            {
                              "expression": null,
                              "functionReturnParameters": 6825,
                              "id": 6854,
                              "nodeType": "Return",
                              "src": "6672:7:10"
                            }
                          ]
                        }
                      }
                    ]
                  }
                },
                {
                  "body": {
                    "id": 6901,
                    "nodeType": "Block",
                    "src": "6740:172:10",
                    "statements": [
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 6874,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 6870,
                              "name": "validators",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6180,
                              "src": "6749:10:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_address_$dyn_storage",
                                "typeString": "address[] storage ref"
                              }
                            },
                            "id": 6872,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 6871,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6860,
                              "src": "6760:1:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "6749:13:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 6873,
                            "name": "_validator",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6821,
                            "src": "6766:10:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "6749:27:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 6900,
                        "nodeType": "IfStatement",
                        "src": "6745:163:10",
                        "trueBody": {
                          "id": 6899,
                          "nodeType": "Block",
                          "src": "6778:130:10",
                          "statements": [
                            {
                              "condition": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 6880,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "id": 6875,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6860,
                                  "src": "6788:1:10",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "<",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 6879,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 6876,
                                      "name": "validators",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6180,
                                      "src": "6792:10:10",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_address_$dyn_storage",
                                        "typeString": "address[] storage ref"
                                      }
                                    },
                                    "id": 6877,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "length",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": null,
                                    "src": "6792:17:10",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "-",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "hexValue": "31",
                                    "id": 6878,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "6812:1:10",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_1_by_1",
                                      "typeString": "int_const 1"
                                    },
                                    "value": "1"
                                  },
                                  "src": "6792:21:10",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "6788:25:10",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "falseBody": null,
                              "id": 6892,
                              "nodeType": "IfStatement",
                              "src": "6784:85:10",
                              "trueBody": {
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 6890,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftHandSide": {
                                    "argumentTypes": null,
                                    "baseExpression": {
                                      "argumentTypes": null,
                                      "id": 6881,
                                      "name": "validators",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6180,
                                      "src": "6820:10:10",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_address_$dyn_storage",
                                        "typeString": "address[] storage ref"
                                      }
                                    },
                                    "id": 6883,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "id": 6882,
                                      "name": "i",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6860,
                                      "src": "6831:1:10",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": true,
                                    "nodeType": "IndexAccess",
                                    "src": "6820:13:10",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "nodeType": "Assignment",
                                  "operator": "=",
                                  "rightHandSide": {
                                    "argumentTypes": null,
                                    "baseExpression": {
                                      "argumentTypes": null,
                                      "id": 6884,
                                      "name": "validators",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6180,
                                      "src": "6836:10:10",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_address_$dyn_storage",
                                        "typeString": "address[] storage ref"
                                      }
                                    },
                                    "id": 6889,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 6888,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "argumentTypes": null,
                                        "expression": {
                                          "argumentTypes": null,
                                          "id": 6885,
                                          "name": "validators",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 6180,
                                          "src": "6847:10:10",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_array$_t_address_$dyn_storage",
                                            "typeString": "address[] storage ref"
                                          }
                                        },
                                        "id": 6886,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "length",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": null,
                                        "src": "6847:17:10",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "-",
                                      "rightExpression": {
                                        "argumentTypes": null,
                                        "hexValue": "31",
                                        "id": 6887,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "6867:1:10",
                                        "subdenomination": null,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_1_by_1",
                                          "typeString": "int_const 1"
                                        },
                                        "value": "1"
                                      },
                                      "src": "6847:21:10",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "6836:33:10",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "src": "6820:49:10",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "id": 6891,
                                "nodeType": "ExpressionStatement",
                                "src": "6820:49:10"
                              }
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 6893,
                                    "name": "validators",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6180,
                                    "src": "6875:10:10",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_address_$dyn_storage",
                                      "typeString": "address[] storage ref"
                                    }
                                  },
                                  "id": 6895,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "pop",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "6875:14:10",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_arraypop_nonpayable$__$returns$__$",
                                    "typeString": "function ()"
                                  }
                                },
                                "id": 6896,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "6875:16:10",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 6897,
                              "nodeType": "ExpressionStatement",
                              "src": "6875:16:10"
                            },
                            {
                              "id": 6898,
                              "nodeType": "Break",
                              "src": "6897:5:10"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 6866,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 6863,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6860,
                      "src": "6712:1:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 6864,
                        "name": "validators",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6180,
                        "src": "6716:10:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_storage",
                          "typeString": "address[] storage ref"
                        }
                      },
                      "id": 6865,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "6716:17:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "6712:21:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 6902,
                  "initializationExpression": {
                    "assignments": [
                      6860
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 6860,
                        "mutability": "mutable",
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 6902,
                        "src": "6697:9:10",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 6859,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "6697:7:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 6862,
                    "initialValue": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 6861,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "6709:1:10",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "6697:13:10"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 6868,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "6735:3:10",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 6867,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6860,
                        "src": "6735:1:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 6869,
                    "nodeType": "ExpressionStatement",
                    "src": "6735:3:10"
                  },
                  "nodeType": "ForStatement",
                  "src": "6692:220:10"
                }
              ]
            },
            "documentation": null,
            "functionSelector": "40a141ff",
            "id": 6904,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 6824,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 6823,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 7818,
                  "src": "6313:9:10",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "6313:9:10"
              }
            ],
            "name": "removeValidator",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 6822,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6821,
                  "mutability": "mutable",
                  "name": "_validator",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6904,
                  "src": "6286:18:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6820,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6286:7:10",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6285:20:10"
            },
            "returnParameters": {
              "id": 6825,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6323:0:10"
            },
            "scope": 7377,
            "src": "6261:654:10",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 7067,
              "nodeType": "Block",
              "src": "6955:1473:10",
              "statements": [
                {
                  "assignments": [
                    6908
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 6908,
                      "mutability": "mutable",
                      "name": "curDay",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 7067,
                      "src": "6959:14:10",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 6907,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "6959:7:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 6912,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 6909,
                        "name": "ubischeme",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6188,
                        "src": "6976:9:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_UBIScheme_$519",
                          "typeString": "contract UBIScheme"
                        }
                      },
                      "id": 6910,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "currentDay",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 518,
                      "src": "6976:20:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$",
                        "typeString": "function () view external returns (uint256)"
                      }
                    },
                    "id": 6911,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6976:22:10",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6959:39:10"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 6916,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 6914,
                          "name": "curDay",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6908,
                          "src": "7014:6:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 6915,
                          "name": "lastDayCollected",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6194,
                          "src": "7024:16:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "7014:26:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "63616e20636f6c6c656374206f6e6c79206f6e636520696e206120756269206379636c65",
                        "id": 6917,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7045:38:10",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_7ab52d82b4ff54b2d28f381727da09016a1caee52ad4c7df9be7476f654c4690",
                          "typeString": "literal_string \"can collect only once in a ubi cycle\""
                        },
                        "value": "can collect only once in a ubi cycle"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_7ab52d82b4ff54b2d28f381727da09016a1caee52ad4c7df9be7476f654c4690",
                          "typeString": "literal_string \"can collect only once in a ubi cycle\""
                        }
                      ],
                      "id": 6913,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "7002:7:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 6918,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7002:85:10",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6919,
                  "nodeType": "ExpressionStatement",
                  "src": "7002:85:10"
                },
                {
                  "assignments": [
                    6921
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 6921,
                      "mutability": "mutable",
                      "name": "earnings",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 7067,
                      "src": "7092:16:10",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 6920,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "7092:7:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 6926,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 6925,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 6922,
                        "name": "balance",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7372,
                        "src": "7111:7:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                          "typeString": "function () view returns (uint256)"
                        }
                      },
                      "id": 6923,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "7111:9:10",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "-",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 6924,
                      "name": "pendingFuseEarnings",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6208,
                      "src": "7123:19:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "7111:31:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7092:50:10"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 6932,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 6930,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 6928,
                            "name": "pendingFuseEarnings",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6208,
                            "src": "7154:19:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "+",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 6929,
                            "name": "earnings",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6921,
                            "src": "7176:8:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "7154:30:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 6931,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "7187:1:10",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "7154:34:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "6e6f206561726e696e677320746f20636f6c6c656374",
                        "id": 6933,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7190:24:10",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_3d429c371bdc4527c0b1b9d10dc18982611a1721ce1c3e2679769b87a51b9bcc",
                          "typeString": "literal_string \"no earnings to collect\""
                        },
                        "value": "no earnings to collect"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_3d429c371bdc4527c0b1b9d10dc18982611a1721ce1c3e2679769b87a51b9bcc",
                          "typeString": "literal_string \"no earnings to collect\""
                        }
                      ],
                      "id": 6927,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "7146:7:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 6934,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7146:69:10",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6935,
                  "nodeType": "ExpressionStatement",
                  "src": "7146:69:10"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 6938,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 6936,
                      "name": "lastDayCollected",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6194,
                      "src": "7220:16:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 6937,
                      "name": "curDay",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6908,
                      "src": "7239:6:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "7220:25:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 6939,
                  "nodeType": "ExpressionStatement",
                  "src": "7220:25:10"
                },
                {
                  "assignments": [
                    6941
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 6941,
                      "mutability": "mutable",
                      "name": "fuseUBI",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 7067,
                      "src": "7249:15:10",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 6940,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "7249:7:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 6951,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 6949,
                        "name": "RATIO_BASE",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6202,
                        "src": "7316:10:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 6946,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "id": 6944,
                              "name": "RATIO_BASE",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6202,
                              "src": "7283:10:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "-",
                            "rightExpression": {
                              "argumentTypes": null,
                              "id": 6945,
                              "name": "stakeBackRatio",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6196,
                              "src": "7296:14:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "7283:27:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 6942,
                            "name": "earnings",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6921,
                            "src": "7270:8:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 6943,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "mul",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 8053,
                          "src": "7270:12:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                            "typeString": "function (uint256,uint256) pure returns (uint256)"
                          }
                        },
                        "id": 6947,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "7270:41:10",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 6948,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "div",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 8070,
                      "src": "7270:45:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 6950,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7270:57:10",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7249:78:10"
                },
                {
                  "assignments": [
                    6953
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 6953,
                      "mutability": "mutable",
                      "name": "stakeBack",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 7067,
                      "src": "7331:17:10",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 6952,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "7331:7:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 6957,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 6956,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 6954,
                      "name": "earnings",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6921,
                      "src": "7351:8:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "-",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 6955,
                      "name": "fuseUBI",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6941,
                      "src": "7362:7:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "7351:18:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7331:38:10"
                },
                {
                  "assignments": [
                    6962
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 6962,
                      "mutability": "mutable",
                      "name": "fuseswapResult",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 7067,
                      "src": "7374:31:10",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                        "typeString": "uint256[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 6960,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "7374:7:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 6961,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "7374:9:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                          "typeString": "uint256[]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 6969,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 6966,
                            "name": "pendingFuseEarnings",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6208,
                            "src": "7430:19:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 6964,
                            "name": "fuseUBI",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6941,
                            "src": "7418:7:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 6965,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "add",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 7973,
                          "src": "7418:11:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                            "typeString": "function (uint256,uint256) pure returns (uint256)"
                          }
                        },
                        "id": 6967,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "7418:32:10",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 6963,
                      "name": "_buyGD",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7132,
                      "src": "7411:6:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$",
                        "typeString": "function (uint256) returns (uint256[] memory)"
                      }
                    },
                    "id": 6968,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7411:40:10",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                      "typeString": "uint256[] memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7374:77:10"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 6980,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 6970,
                      "name": "pendingFuseEarnings",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6208,
                      "src": "7484:19:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 6976,
                            "name": "fuseswapResult",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6962,
                            "src": "7547:14:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                              "typeString": "uint256[] memory"
                            }
                          },
                          "id": 6978,
                          "indexExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 6977,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "7562:1:10",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "7547:17:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 6973,
                              "name": "pendingFuseEarnings",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6208,
                              "src": "7518:19:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 6971,
                              "name": "fuseUBI",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6941,
                              "src": "7506:7:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 6972,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "add",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 7973,
                            "src": "7506:11:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                              "typeString": "function (uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 6974,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7506:32:10",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 6975,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sub",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7990,
                        "src": "7506:36:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                          "typeString": "function (uint256,uint256) pure returns (uint256)"
                        }
                      },
                      "id": 6979,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "7506:62:10",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "7484:84:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 6981,
                  "nodeType": "ExpressionStatement",
                  "src": "7484:84:10"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 6983,
                        "name": "stakeBack",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6953,
                        "src": "7591:9:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 6986,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "7610:1:10",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            }
                          ],
                          "id": 6985,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "7602:7:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 6984,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "7602:7:10",
                            "typeDescriptions": {
                              "typeIdentifier": null,
                              "typeString": null
                            }
                          }
                        },
                        "id": 6987,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "7602:10:10",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "id": 6982,
                      "name": "stakeNextValidator",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6760,
                      "src": "7572:18:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_address_$returns$_t_bool_$",
                        "typeString": "function (uint256,address) returns (bool)"
                      }
                    },
                    "id": 6988,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7572:41:10",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 6989,
                  "nodeType": "ExpressionStatement",
                  "src": "7572:41:10"
                },
                {
                  "assignments": [
                    6991
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 6991,
                      "mutability": "mutable",
                      "name": "gdBought",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 7067,
                      "src": "7656:16:10",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 6990,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "7656:7:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 6995,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 6992,
                      "name": "fuseswapResult",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6962,
                      "src": "7675:14:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                        "typeString": "uint256[] memory"
                      }
                    },
                    "id": 6994,
                    "indexExpression": {
                      "argumentTypes": null,
                      "hexValue": "31",
                      "id": 6993,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "7690:1:10",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "7675:17:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7656:36:10"
                },
                {
                  "assignments": [
                    6997
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 6997,
                      "mutability": "mutable",
                      "name": "keeperFee",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 7067,
                      "src": "7696:17:10",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 6996,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "7696:7:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7005,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7003,
                        "name": "RATIO_BASE",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6202,
                        "src": "7749:10:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 7000,
                            "name": "keeperFeeRatio",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6200,
                            "src": "7729:14:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 6998,
                            "name": "gdBought",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6991,
                            "src": "7716:8:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 6999,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "mul",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 8053,
                          "src": "7716:12:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                            "typeString": "function (uint256,uint256) pure returns (uint256)"
                          }
                        },
                        "id": 7001,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "7716:28:10",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 7002,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "div",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 8070,
                      "src": "7716:32:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 7004,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7716:44:10",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7696:64:10"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 7008,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 7006,
                      "name": "keeperFee",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6997,
                      "src": "7768:9:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 7007,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "7780:1:10",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "7768:13:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 7017,
                  "nodeType": "IfStatement",
                  "src": "7764:53:10",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 7012,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "7795:3:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 7013,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "7795:10:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 7014,
                          "name": "keeperFee",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6997,
                          "src": "7807:9:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 7009,
                          "name": "GD",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6186,
                          "src": "7783:2:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_GoodDollar_$330",
                            "typeString": "contract GoodDollar"
                          }
                        },
                        "id": 7011,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "transfer",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 299,
                        "src": "7783:11:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                          "typeString": "function (address,uint256) external returns (bool)"
                        }
                      },
                      "id": 7015,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "7783:34:10",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "id": 7016,
                    "nodeType": "ExpressionStatement",
                    "src": "7783:34:10"
                  }
                },
                {
                  "assignments": [
                    7019
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7019,
                      "mutability": "mutable",
                      "name": "communityPoolContribution",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 7067,
                      "src": "7822:33:10",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7018,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "7822:7:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7030,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7028,
                        "name": "RATIO_BASE",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6202,
                        "src": "7966:10:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 7025,
                            "name": "communityPoolRatio",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6204,
                            "src": "7914:18:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 7022,
                                "name": "keeperFee",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6997,
                                "src": "7879:9:10",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 7020,
                                "name": "gdBought",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6991,
                                "src": "7861:8:10",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 7021,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sub",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 7990,
                              "src": "7861:17:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 7023,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "7861:28:10",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 7024,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "mul",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 8053,
                          "src": "7861:52:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                            "typeString": "function (uint256,uint256) pure returns (uint256)"
                          }
                        },
                        "id": 7026,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "7861:72:10",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 7027,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "div",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 8070,
                      "src": "7861:104:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 7029,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7861:116:10",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7822:155:10"
                },
                {
                  "assignments": [
                    7032
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7032,
                      "mutability": "mutable",
                      "name": "ubiAfterFeeAndPool",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 7067,
                      "src": "8022:26:10",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7031,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "8022:7:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7037,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7035,
                        "name": "communityPoolContribution",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7019,
                        "src": "8064:25:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 7033,
                        "name": "gdBought",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6991,
                        "src": "8051:8:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 7034,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sub",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7990,
                      "src": "8051:12:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 7036,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8051:39:10",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "8022:68:10"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 7043,
                            "name": "ubischeme",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6188,
                            "src": "8115:9:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_UBIScheme_$519",
                              "typeString": "contract UBIScheme"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_UBIScheme_$519",
                              "typeString": "contract UBIScheme"
                            }
                          ],
                          "id": 7042,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "8107:7:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 7041,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "8107:7:10",
                            "typeDescriptions": {
                              "typeIdentifier": null,
                              "typeString": null
                            }
                          }
                        },
                        "id": 7044,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "8107:18:10",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7045,
                        "name": "ubiAfterFeeAndPool",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7032,
                        "src": "8127:18:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 7038,
                        "name": "GD",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6186,
                        "src": "8095:2:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_GoodDollar_$330",
                          "typeString": "contract GoodDollar"
                        }
                      },
                      "id": 7040,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "transfer",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 299,
                      "src": "8095:11:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                        "typeString": "function (address,uint256) external returns (bool)"
                      }
                    },
                    "id": 7046,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8095:51:10",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 7047,
                  "nodeType": "ExpressionStatement",
                  "src": "8095:51:10"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7053,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 7048,
                      "name": "communityPoolBalance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6206,
                      "src": "8174:20:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 7051,
                          "name": "communityPoolContribution",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7019,
                          "src": "8226:25:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 7049,
                          "name": "communityPoolBalance",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6206,
                          "src": "8197:20:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 7050,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "add",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7973,
                        "src": "8197:24:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                          "typeString": "function (uint256,uint256) pure returns (uint256)"
                        }
                      },
                      "id": 7052,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "8197:58:10",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "8174:81:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 7054,
                  "nodeType": "ExpressionStatement",
                  "src": "8174:81:10"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7056,
                        "name": "curDay",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6908,
                        "src": "8282:6:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7057,
                        "name": "ubiAfterFeeAndPool",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7032,
                        "src": "8293:18:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7058,
                        "name": "communityPoolContribution",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7019,
                        "src": "8316:25:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7059,
                        "name": "gdBought",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6991,
                        "src": "8346:8:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7060,
                        "name": "earnings",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6921,
                        "src": "8359:8:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7061,
                        "name": "pendingFuseEarnings",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6208,
                        "src": "8372:19:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 7062,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "8396:3:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 7063,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "8396:10:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7064,
                        "name": "keeperFee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6997,
                        "src": "8411:9:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 7055,
                      "name": "UBICollected",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6226,
                      "src": "8265:12:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (uint256,uint256,uint256,uint256,uint256,uint256,address,uint256)"
                      }
                    },
                    "id": 7065,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8265:159:10",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7066,
                  "nodeType": "EmitStatement",
                  "src": "8260:164:10"
                }
              ]
            },
            "documentation": null,
            "functionSelector": "a5a90636",
            "id": 7068,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "collectUBIInterest",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 6905,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6945:2:10"
            },
            "returnParameters": {
              "id": 6906,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6955:0:10"
            },
            "scope": 7377,
            "src": "6918:1510:10",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 7131,
              "nodeType": "Block",
              "src": "8641:336:10",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 7080,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 7078,
                          "name": "_value",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7071,
                          "src": "8674:6:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 7079,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "8683:1:10",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "8674:10:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "6275792076616c75652073686f756c64206265203e2030",
                        "id": 7081,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "8686:25:10",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_2161b5d7967b0c445d74e818c0e21d5fb08d78a2651dd5815a6dee3023326181",
                          "typeString": "literal_string \"buy value should be > 0\""
                        },
                        "value": "buy value should be > 0"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_2161b5d7967b0c445d74e818c0e21d5fb08d78a2651dd5815a6dee3023326181",
                          "typeString": "literal_string \"buy value should be > 0\""
                        }
                      ],
                      "id": 7077,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "8666:7:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 7082,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8666:46:10",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7083,
                  "nodeType": "ExpressionStatement",
                  "src": "8666:46:10"
                },
                {
                  "assignments": [
                    7085
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7085,
                      "mutability": "mutable",
                      "name": "maxFuse",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 7131,
                      "src": "8716:15:10",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7084,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "8716:7:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7089,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7087,
                        "name": "_value",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7071,
                        "src": "8758:6:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 7086,
                      "name": "calcMaxFuseWithSlippage",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        7154,
                        7323
                      ],
                      "referencedDeclaration": 7154,
                      "src": "8734:23:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256) view returns (uint256)"
                      }
                    },
                    "id": 7088,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8734:31:10",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "8716:49:10"
                },
                {
                  "assignments": [
                    7094
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7094,
                      "mutability": "mutable",
                      "name": "path",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 7131,
                      "src": "8769:21:10",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                        "typeString": "address[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 7092,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "8769:7:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 7093,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "8769:9:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                          "typeString": "address[]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7100,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "32",
                        "id": 7098,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "8807:1:10",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_2_by_1",
                          "typeString": "int_const 2"
                        },
                        "value": "2"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_rational_2_by_1",
                          "typeString": "int_const 2"
                        }
                      ],
                      "id": 7097,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "NewExpression",
                      "src": "8793:13:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_address_$dyn_memory_ptr_$",
                        "typeString": "function (uint256) pure returns (address[] memory)"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 7095,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "8797:7:10",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 7096,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "8797:9:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                          "typeString": "address[]"
                        }
                      }
                    },
                    "id": 7099,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8793:16:10",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                      "typeString": "address[] memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "8769:40:10"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7108,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 7101,
                        "name": "path",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7094,
                        "src": "8813:4:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[] memory"
                        }
                      },
                      "id": 7103,
                      "indexExpression": {
                        "argumentTypes": null,
                        "hexValue": "31",
                        "id": 7102,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "8818:1:10",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        "value": "1"
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "8813:7:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 7106,
                          "name": "GD",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6186,
                          "src": "8831:2:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_GoodDollar_$330",
                            "typeString": "contract GoodDollar"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_GoodDollar_$330",
                            "typeString": "contract GoodDollar"
                          }
                        ],
                        "id": 7105,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "8823:7:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": {
                          "id": 7104,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "8823:7:10",
                          "typeDescriptions": {
                            "typeIdentifier": null,
                            "typeString": null
                          }
                        }
                      },
                      "id": 7107,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "8823:11:10",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "8813:21:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 7109,
                  "nodeType": "ExpressionStatement",
                  "src": "8813:21:10"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7116,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 7110,
                        "name": "path",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7094,
                        "src": "8838:4:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[] memory"
                        }
                      },
                      "id": 7112,
                      "indexExpression": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 7111,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "8843:1:10",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "8838:7:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "expression": {
                          "argumentTypes": null,
                          "id": 7113,
                          "name": "uniswap",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6184,
                          "src": "8848:7:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_Uniswap_$444",
                            "typeString": "contract Uniswap"
                          }
                        },
                        "id": 7114,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "WETH",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 405,
                        "src": "8848:12:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_pure$__$returns$_t_address_$",
                          "typeString": "function () pure external returns (address)"
                        }
                      },
                      "id": 7115,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "8848:14:10",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "8838:24:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 7117,
                  "nodeType": "ExpressionStatement",
                  "src": "8838:24:10"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 7122,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "8929:1:10",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      {
                        "argumentTypes": null,
                        "id": 7123,
                        "name": "path",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7094,
                        "src": "8936:4:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[] memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 7126,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -28,
                            "src": "8954:4:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_FuseStakingV3_$7377",
                              "typeString": "contract FuseStakingV3"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_FuseStakingV3_$7377",
                              "typeString": "contract FuseStakingV3"
                            }
                          ],
                          "id": 7125,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "8946:7:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 7124,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "8946:7:10",
                            "typeDescriptions": {
                              "typeIdentifier": null,
                              "typeString": null
                            }
                          }
                        },
                        "id": 7127,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "8946:13:10",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7128,
                        "name": "now",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -17,
                        "src": "8965:3:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[] memory"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          {
                            "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                            "typeString": "address[] memory"
                          },
                          {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 7118,
                          "name": "uniswap",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6184,
                          "src": "8876:7:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_Uniswap_$444",
                            "typeString": "contract Uniswap"
                          }
                        },
                        "id": 7119,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "swapExactETHForTokens",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 366,
                        "src": "8876:29:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_payable$_t_uint256_$_t_array$_t_address_$dyn_memory_ptr_$_t_address_$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$",
                          "typeString": "function (uint256,address[] memory,address,uint256) payable external returns (uint256[] memory)"
                        }
                      },
                      "id": 7121,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "names": [
                        "value"
                      ],
                      "nodeType": "FunctionCallOptions",
                      "options": [
                        {
                          "argumentTypes": null,
                          "id": 7120,
                          "name": "maxFuse",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7085,
                          "src": "8914:7:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "src": "8876:47:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_payable$_t_uint256_$_t_array$_t_address_$dyn_memory_ptr_$_t_address_$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$value",
                        "typeString": "function (uint256,address[] memory,address,uint256) payable external returns (uint256[] memory)"
                      }
                    },
                    "id": 7129,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8876:97:10",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                      "typeString": "uint256[] memory"
                    }
                  },
                  "functionReturnParameters": 7076,
                  "id": 7130,
                  "nodeType": "Return",
                  "src": "8866:107:10"
                }
              ]
            },
            "documentation": {
              "id": 7069,
              "nodeType": "StructuredDocumentation",
              "src": "8431:140:10",
              "text": " @dev internal method to buy GD from fuseswap\n @param _value fuse to be sold\n @return uniswap coversion results uint256[2]"
            },
            "id": 7132,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_buyGD",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 7072,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7071,
                  "mutability": "mutable",
                  "name": "_value",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 7132,
                  "src": "8589:14:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7070,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8589:7:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8588:16:10"
            },
            "returnParameters": {
              "id": 7076,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7075,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 7132,
                  "src": "8623:16:10",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 7073,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "8623:7:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 7074,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "8623:9:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8622:18:10"
            },
            "scope": 7377,
            "src": "8573:404:10",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 7153,
              "nodeType": "Block",
              "src": "9066:125:10",
              "statements": [
                {
                  "assignments": [
                    7140,
                    7142,
                    null
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7140,
                      "mutability": "mutable",
                      "name": "r_fuse",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 7153,
                      "src": "9071:14:10",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7139,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "9071:7:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 7142,
                      "mutability": "mutable",
                      "name": "r_gd",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 7153,
                      "src": "9087:12:10",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7141,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "9087:7:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    null
                  ],
                  "id": 7146,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 7143,
                        "name": "uniswapPair",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6192,
                        "src": "9105:11:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_UniswapPair_$469",
                          "typeString": "contract UniswapPair"
                        }
                      },
                      "id": 7144,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "getReserves",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 463,
                      "src": "9105:23:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$__$returns$_t_uint112_$_t_uint112_$_t_uint32_$",
                        "typeString": "function () view external returns (uint112,uint112,uint32)"
                      }
                    },
                    "id": 7145,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9105:25:10",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint112_$_t_uint112_$_t_uint32_$",
                      "typeString": "tuple(uint112,uint112,uint32)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "9070:60:10"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7148,
                        "name": "r_fuse",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7140,
                        "src": "9166:6:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7149,
                        "name": "r_gd",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7142,
                        "src": "9174:4:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7150,
                        "name": "_value",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7134,
                        "src": "9180:6:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 7147,
                      "name": "calcMaxFuseWithSlippage",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        7154,
                        7323
                      ],
                      "referencedDeclaration": 7323,
                      "src": "9142:23:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256,uint256,uint256) view returns (uint256)"
                      }
                    },
                    "id": 7151,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9142:45:10",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 7138,
                  "id": 7152,
                  "nodeType": "Return",
                  "src": "9135:52:10"
                }
              ]
            },
            "documentation": null,
            "functionSelector": "2cda8943",
            "id": 7154,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "calcMaxFuseWithSlippage",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 7135,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7134,
                  "mutability": "mutable",
                  "name": "_value",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 7154,
                  "src": "9013:14:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7133,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9013:7:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9012:16:10"
            },
            "returnParameters": {
              "id": 7138,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7137,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 7154,
                  "src": "9056:7:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7136,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9056:7:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9055:9:10"
            },
            "scope": 7377,
            "src": "8980:211:10",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 7196,
              "nodeType": "Block",
              "src": "9366:214:10",
              "statements": [
                {
                  "assignments": [
                    7167
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7167,
                      "mutability": "mutable",
                      "name": "amountInWithFee",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 7196,
                      "src": "9370:23:10",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7166,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "9370:7:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7172,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "393937",
                        "id": 7170,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "9410:3:10",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_997_by_1",
                          "typeString": "int_const 997"
                        },
                        "value": "997"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_rational_997_by_1",
                          "typeString": "int_const 997"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 7168,
                        "name": "_amountIn",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7157,
                        "src": "9396:9:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 7169,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mul",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 8053,
                      "src": "9396:13:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 7171,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9396:18:10",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "9370:44:10"
                },
                {
                  "assignments": [
                    7174
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7174,
                      "mutability": "mutable",
                      "name": "numerator",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 7196,
                      "src": "9418:17:10",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7173,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "9418:7:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7179,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7177,
                        "name": "_reserveOut",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7161,
                        "src": "9458:11:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 7175,
                        "name": "amountInWithFee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7167,
                        "src": "9438:15:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 7176,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mul",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 8053,
                      "src": "9438:19:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 7178,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9438:32:10",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "9418:52:10"
                },
                {
                  "assignments": [
                    7181
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7181,
                      "mutability": "mutable",
                      "name": "denominator",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 7196,
                      "src": "9474:19:10",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7180,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "9474:7:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7189,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7187,
                        "name": "amountInWithFee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7167,
                        "src": "9521:15:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "31303030",
                            "id": 7184,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "9511:4:10",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1000_by_1",
                              "typeString": "int_const 1000"
                            },
                            "value": "1000"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_1000_by_1",
                              "typeString": "int_const 1000"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 7182,
                            "name": "_reserveIn",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7159,
                            "src": "9496:10:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 7183,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "mul",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 8053,
                          "src": "9496:14:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                            "typeString": "function (uint256,uint256) pure returns (uint256)"
                          }
                        },
                        "id": 7185,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "9496:20:10",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 7186,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "add",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7973,
                      "src": "9496:24:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 7188,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9496:41:10",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "9474:63:10"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7194,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 7190,
                      "name": "amountOut",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7164,
                      "src": "9541:9:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 7193,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 7191,
                        "name": "numerator",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7174,
                        "src": "9553:9:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "/",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 7192,
                        "name": "denominator",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7181,
                        "src": "9565:11:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "9553:23:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "9541:35:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 7195,
                  "nodeType": "ExpressionStatement",
                  "src": "9541:35:10"
                }
              ]
            },
            "documentation": {
              "id": 7155,
              "nodeType": "StructuredDocumentation",
              "src": "9194:37:10",
              "text": " uniswap amountOut helper"
            },
            "id": 7197,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getAmountOut",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 7162,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7157,
                  "mutability": "mutable",
                  "name": "_amountIn",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 7197,
                  "src": "9258:17:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7156,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9258:7:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7159,
                  "mutability": "mutable",
                  "name": "_reserveIn",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 7197,
                  "src": "9279:18:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7158,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9279:7:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7161,
                  "mutability": "mutable",
                  "name": "_reserveOut",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 7197,
                  "src": "9301:19:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7160,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9301:7:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9254:69:10"
            },
            "returnParameters": {
              "id": 7165,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7164,
                  "mutability": "mutable",
                  "name": "amountOut",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 7197,
                  "src": "9347:17:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7163,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9347:7:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9346:19:10"
            },
            "scope": 7377,
            "src": "9233:347:10",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 7322,
              "nodeType": "Block",
              "src": "9805:1011:10",
              "statements": [
                {
                  "assignments": [
                    7210
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7210,
                      "mutability": "mutable",
                      "name": "start",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 7322,
                      "src": "9809:13:10",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7209,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "9809:7:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7212,
                  "initialValue": {
                    "argumentTypes": null,
                    "hexValue": "30",
                    "id": 7211,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "9825:1:10",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_0_by_1",
                      "typeString": "int_const 0"
                    },
                    "value": "0"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "9809:17:10"
                },
                {
                  "assignments": [
                    7214
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7214,
                      "mutability": "mutable",
                      "name": "end",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 7322,
                      "src": "9830:11:10",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7213,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "9830:7:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7219,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "31653138",
                        "id": 7217,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "9855:4:10",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1000000000000000000_by_1",
                          "typeString": "int_const 1000000000000000000"
                        },
                        "value": "1e18"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_rational_1000000000000000000_by_1",
                          "typeString": "int_const 1000000000000000000"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 7215,
                        "name": "_value",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7204,
                        "src": "9844:6:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 7216,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "div",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 8070,
                      "src": "9844:10:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 7218,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9844:16:10",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "9830:30:10"
                },
                {
                  "assignments": [
                    7221
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7221,
                      "mutability": "mutable",
                      "name": "curPriceWei",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 7322,
                      "src": "9925:19:10",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7220,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "9925:7:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7231,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 7230,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 7227,
                          "name": "r_fuse",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7200,
                          "src": "9964:6:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "313030",
                              "id": 7224,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "9955:3:10",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_100_by_1",
                                "typeString": "int_const 100"
                              },
                              "value": "100"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_100_by_1",
                                "typeString": "int_const 100"
                              }
                            ],
                            "id": 7223,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "9947:7:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint256_$",
                              "typeString": "type(uint256)"
                            },
                            "typeName": {
                              "id": 7222,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "9947:7:10",
                              "typeDescriptions": {
                                "typeIdentifier": null,
                                "typeString": null
                              }
                            }
                          },
                          "id": 7225,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "9947:12:10",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 7226,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "mul",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 8053,
                        "src": "9947:16:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                          "typeString": "function (uint256,uint256) pure returns (uint256)"
                        }
                      },
                      "id": 7228,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "9947:24:10",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "/",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 7229,
                      "name": "r_gd",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7202,
                      "src": "9974:4:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "9947:31:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "9925:53:10"
                },
                {
                  "assignments": [
                    7233
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7233,
                      "mutability": "mutable",
                      "name": "maxPriceWei",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 7322,
                      "src": "10028:19:10",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7232,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "10028:7:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7244,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7242,
                        "name": "RATIO_BASE",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6202,
                        "src": "10107:10:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 7238,
                                "name": "maxSlippageRatio",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6198,
                                "src": "10084:16:10",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 7236,
                                "name": "RATIO_BASE",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6202,
                                "src": "10069:10:10",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 7237,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "add",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 7973,
                              "src": "10069:14:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 7239,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "10069:32:10",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 7234,
                            "name": "curPriceWei",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7221,
                            "src": "10053:11:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 7235,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "mul",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 8053,
                          "src": "10053:15:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                            "typeString": "function (uint256,uint256) pure returns (uint256)"
                          }
                        },
                        "id": 7240,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "10053:49:10",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 7241,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "div",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 8070,
                      "src": "10053:53:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 7243,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10053:65:10",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "10028:90:10"
                },
                {
                  "assignments": [
                    7246
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7246,
                      "mutability": "mutable",
                      "name": "fuseAmount",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 7322,
                      "src": "10122:18:10",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7245,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "10122:7:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7248,
                  "initialValue": {
                    "argumentTypes": null,
                    "id": 7247,
                    "name": "_value",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 7204,
                    "src": "10143:6:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "10122:27:10"
                },
                {
                  "body": {
                    "id": 7318,
                    "nodeType": "Block",
                    "src": "10213:578:10",
                    "statements": [
                      {
                        "assignments": [
                          7253
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 7253,
                            "mutability": "mutable",
                            "name": "midQuantityWei",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 7318,
                            "src": "10243:22:10",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 7252,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "10243:7:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 7264,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "32",
                              "id": 7262,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "10297:1:10",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_2_by_1",
                                "typeString": "int_const 2"
                              },
                              "value": "2"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_2_by_1",
                                "typeString": "int_const 2"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "hexValue": "31653138",
                                  "id": 7259,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "10287:4:10",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_1000000000000000000_by_1",
                                    "typeString": "int_const 1000000000000000000"
                                  },
                                  "value": "1e18"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_rational_1000000000000000000_by_1",
                                    "typeString": "int_const 1000000000000000000"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 7256,
                                      "name": "end",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 7214,
                                      "src": "10278:3:10",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 7254,
                                      "name": "start",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 7210,
                                      "src": "10268:5:10",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 7255,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "add",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 7973,
                                    "src": "10268:9:10",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                      "typeString": "function (uint256,uint256) pure returns (uint256)"
                                    }
                                  },
                                  "id": 7257,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "10268:14:10",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 7258,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "mul",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 8053,
                                "src": "10268:18:10",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                  "typeString": "function (uint256,uint256) pure returns (uint256)"
                                }
                              },
                              "id": 7260,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "10268:24:10",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 7261,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "div",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 8070,
                            "src": "10268:28:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                              "typeString": "function (uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 7263,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "10268:31:10",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "10243:56:10"
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 7267,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 7265,
                            "name": "midQuantityWei",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7253,
                            "src": "10337:14:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 7266,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "10355:1:10",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "10337:19:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 7269,
                        "nodeType": "IfStatement",
                        "src": "10333:30:10",
                        "trueBody": {
                          "id": 7268,
                          "nodeType": "Break",
                          "src": "10358:5:10"
                        }
                      },
                      {
                        "assignments": [
                          7271
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 7271,
                            "mutability": "mutable",
                            "name": "gdForQuantity",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 7318,
                            "src": "10368:21:10",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 7270,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "10368:7:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 7277,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 7273,
                              "name": "midQuantityWei",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7253,
                              "src": "10405:14:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 7274,
                              "name": "r_fuse",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7200,
                              "src": "10421:6:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 7275,
                              "name": "r_gd",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7202,
                              "src": "10429:4:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 7272,
                            "name": "getAmountOut",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7197,
                            "src": "10392:12:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (uint256,uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 7276,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "10392:42:10",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "10368:66:10"
                      },
                      {
                        "assignments": [
                          7279
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 7279,
                            "mutability": "mutable",
                            "name": "priceForQuantityWei",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 7318,
                            "src": "10439:27:10",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 7278,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "10439:7:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 7290,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "316539",
                              "id": 7288,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "10523:3:10",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1000000000_by_1",
                                "typeString": "int_const 1000000000"
                              },
                              "value": "1e9"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_1000000000_by_1",
                                "typeString": "int_const 1000000000"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 7281,
                                  "name": "midQuantityWei",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7253,
                                  "src": "10478:14:10",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "hexValue": "31653136",
                                      "id": 7284,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "10512:4:10",
                                      "subdenomination": null,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_10000000000000000_by_1",
                                        "typeString": "int_const 10000000000000000"
                                      },
                                      "value": "1e16"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_rational_10000000000000000_by_1",
                                        "typeString": "int_const 10000000000000000"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 7282,
                                      "name": "gdForQuantity",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 7271,
                                      "src": "10494:13:10",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 7283,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "mul",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 8053,
                                    "src": "10494:17:10",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                      "typeString": "function (uint256,uint256) pure returns (uint256)"
                                    }
                                  },
                                  "id": 7285,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "10494:23:10",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 7280,
                                "name": "rdiv",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7641,
                                "src": "10473:4:10",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                  "typeString": "function (uint256,uint256) pure returns (uint256)"
                                }
                              },
                              "id": 7286,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "10473:45:10",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 7287,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "div",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 8070,
                            "src": "10473:49:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                              "typeString": "function (uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 7289,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "10473:54:10",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "10439:88:10"
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 7293,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 7291,
                            "name": "priceForQuantityWei",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7279,
                            "src": "10537:19:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 7292,
                            "name": "maxPriceWei",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7233,
                            "src": "10560:11:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "10537:34:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "expression": {
                            "argumentTypes": null,
                            "id": 7315,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "argumentTypes": null,
                              "id": 7308,
                              "name": "end",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7214,
                              "src": "10706:3:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "=",
                            "rightHandSide": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 7314,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "hexValue": "31653138",
                                    "id": 7311,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "10731:4:10",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_1000000000000000000_by_1",
                                      "typeString": "int_const 1000000000000000000"
                                    },
                                    "value": "1e18"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_1000000000000000000_by_1",
                                      "typeString": "int_const 1000000000000000000"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 7309,
                                    "name": "midQuantityWei",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7253,
                                    "src": "10712:14:10",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 7310,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "div",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 8070,
                                  "src": "10712:18:10",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                    "typeString": "function (uint256,uint256) pure returns (uint256)"
                                  }
                                },
                                "id": 7312,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "10712:24:10",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "-",
                              "rightExpression": {
                                "argumentTypes": null,
                                "hexValue": "31",
                                "id": 7313,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "10739:1:10",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_1_by_1",
                                  "typeString": "int_const 1"
                                },
                                "value": "1"
                              },
                              "src": "10712:28:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "10706:34:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 7316,
                          "nodeType": "ExpressionStatement",
                          "src": "10706:34:10"
                        },
                        "id": 7317,
                        "nodeType": "IfStatement",
                        "src": "10533:207:10",
                        "trueBody": {
                          "id": 7307,
                          "nodeType": "Block",
                          "src": "10573:127:10",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 7301,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 7294,
                                  "name": "start",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7210,
                                  "src": "10579:5:10",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 7300,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "hexValue": "31653138",
                                        "id": 7297,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "10606:4:10",
                                        "subdenomination": null,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_1000000000000000000_by_1",
                                          "typeString": "int_const 1000000000000000000"
                                        },
                                        "value": "1e18"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_rational_1000000000000000000_by_1",
                                          "typeString": "int_const 1000000000000000000"
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 7295,
                                        "name": "midQuantityWei",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 7253,
                                        "src": "10587:14:10",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "id": 7296,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "div",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 8070,
                                      "src": "10587:18:10",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                                      }
                                    },
                                    "id": 7298,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "10587:24:10",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "+",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "hexValue": "31",
                                    "id": 7299,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "10614:1:10",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_1_by_1",
                                      "typeString": "int_const 1"
                                    },
                                    "value": "1"
                                  },
                                  "src": "10587:28:10",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "10579:36:10",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 7302,
                              "nodeType": "ExpressionStatement",
                              "src": "10579:36:10"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 7305,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 7303,
                                  "name": "fuseAmount",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7246,
                                  "src": "10667:10:10",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "id": 7304,
                                  "name": "midQuantityWei",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7253,
                                  "src": "10680:14:10",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "10667:27:10",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 7306,
                              "nodeType": "ExpressionStatement",
                              "src": "10667:27:10"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 7251,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 7249,
                      "name": "start",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7210,
                      "src": "10199:5:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 7250,
                      "name": "end",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7214,
                      "src": "10208:3:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "10199:12:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 7319,
                  "nodeType": "WhileStatement",
                  "src": "10192:599:10"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7320,
                    "name": "fuseAmount",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 7246,
                    "src": "10802:10:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 7208,
                  "id": 7321,
                  "nodeType": "Return",
                  "src": "10795:17:10"
                }
              ]
            },
            "documentation": {
              "id": 7198,
              "nodeType": "StructuredDocumentation",
              "src": "9583:102:10",
              "text": " @dev use binary search to find quantity that will result with slippage < maxSlippageRatio"
            },
            "functionSelector": "09b6afb2",
            "id": 7323,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "calcMaxFuseWithSlippage",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 7205,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7200,
                  "mutability": "mutable",
                  "name": "r_fuse",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 7323,
                  "src": "9723:14:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7199,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9723:7:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7202,
                  "mutability": "mutable",
                  "name": "r_gd",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 7323,
                  "src": "9741:12:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7201,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9741:7:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7204,
                  "mutability": "mutable",
                  "name": "_value",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 7323,
                  "src": "9757:14:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7203,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9757:7:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9719:55:10"
            },
            "returnParameters": {
              "id": 7208,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7207,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 7323,
                  "src": "9796:7:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7206,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9796:7:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9795:9:10"
            },
            "scope": 7377,
            "src": "9687:1129:10",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 7356,
              "nodeType": "Block",
              "src": "10914:452:10",
              "statements": [
                {
                  "clauses": [
                    {
                      "block": {
                        "id": 7339,
                        "nodeType": "Block",
                        "src": "10962:21:10",
                        "statements": [
                          {
                            "expression": {
                              "argumentTypes": null,
                              "hexValue": "74727565",
                              "id": 7337,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "bool",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "10974:4:10",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "value": "true"
                            },
                            "functionReturnParameters": 7331,
                            "id": 7338,
                            "nodeType": "Return",
                            "src": "10967:11:10"
                          }
                        ]
                      },
                      "errorName": "",
                      "id": 7340,
                      "nodeType": "TryCatchClause",
                      "parameters": null,
                      "src": "10962:21:10"
                    },
                    {
                      "block": {
                        "id": 7346,
                        "nodeType": "Block",
                        "src": "11029:132:10",
                        "statements": [
                          {
                            "expression": {
                              "argumentTypes": null,
                              "hexValue": "66616c7365",
                              "id": 7344,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "bool",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "11151:5:10",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "value": "false"
                            },
                            "functionReturnParameters": 7331,
                            "id": 7345,
                            "nodeType": "Return",
                            "src": "11144:12:10"
                          }
                        ]
                      },
                      "errorName": "Error",
                      "id": 7347,
                      "nodeType": "TryCatchClause",
                      "parameters": {
                        "id": 7343,
                        "nodeType": "ParameterList",
                        "parameters": [
                          {
                            "constant": false,
                            "id": 7342,
                            "mutability": "mutable",
                            "name": "",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 7347,
                            "src": "11000:13:10",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string"
                            },
                            "typeName": {
                              "id": 7341,
                              "name": "string",
                              "nodeType": "ElementaryTypeName",
                              "src": "11000:6:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_storage_ptr",
                                "typeString": "string"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "src": "10995:33:10"
                      },
                      "src": "10984:177:10"
                    },
                    {
                      "block": {
                        "id": 7353,
                        "nodeType": "Block",
                        "src": "11207:156:10",
                        "statements": [
                          {
                            "expression": {
                              "argumentTypes": null,
                              "hexValue": "66616c7365",
                              "id": 7351,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "bool",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "11353:5:10",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "value": "false"
                            },
                            "functionReturnParameters": 7331,
                            "id": 7352,
                            "nodeType": "Return",
                            "src": "11346:12:10"
                          }
                        ]
                      },
                      "errorName": "",
                      "id": 7354,
                      "nodeType": "TryCatchClause",
                      "parameters": {
                        "id": 7350,
                        "nodeType": "ParameterList",
                        "parameters": [
                          {
                            "constant": false,
                            "id": 7349,
                            "mutability": "mutable",
                            "name": "",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 7354,
                            "src": "11173:12:10",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes"
                            },
                            "typeName": {
                              "id": 7348,
                              "name": "bytes",
                              "nodeType": "ElementaryTypeName",
                              "src": "11173:5:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_storage_ptr",
                                "typeString": "bytes"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "src": "11168:38:10"
                      },
                      "src": "11162:201:10"
                    }
                  ],
                  "externalCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7334,
                        "name": "_validator",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7325,
                        "src": "10941:10:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7335,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7327,
                        "src": "10953:7:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 7332,
                        "name": "consensus",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6182,
                        "src": "10922:9:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IConsensus_$6164",
                          "typeString": "contract IConsensus"
                        }
                      },
                      "id": 7333,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "withdraw",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6147,
                      "src": "10922:18:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256) external"
                      }
                    },
                    "id": 7336,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10922:39:10",
                    "tryCall": true,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7355,
                  "nodeType": "TryStatement",
                  "src": "10918:445:10"
                }
              ]
            },
            "documentation": null,
            "id": 7357,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "undelegateWithCatch",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 7328,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7325,
                  "mutability": "mutable",
                  "name": "_validator",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 7357,
                  "src": "10848:18:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7324,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "10848:7:10",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7327,
                  "mutability": "mutable",
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 7357,
                  "src": "10868:15:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7326,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "10868:7:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10847:37:10"
            },
            "returnParameters": {
              "id": 7331,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7330,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 7357,
                  "src": "10907:4:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 7329,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "10907:4:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10906:6:10"
            },
            "scope": 7377,
            "src": "10819:547:10",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 7371,
              "nodeType": "Block",
              "src": "11420:45:10",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 7366,
                              "name": "this",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -28,
                              "src": "11447:4:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_FuseStakingV3_$7377",
                                "typeString": "contract FuseStakingV3"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_FuseStakingV3_$7377",
                                "typeString": "contract FuseStakingV3"
                              }
                            ],
                            "id": 7365,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "11439:7:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 7364,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "11439:7:10",
                              "typeDescriptions": {
                                "typeIdentifier": null,
                                "typeString": null
                              }
                            }
                          },
                          "id": 7367,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "11439:13:10",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        ],
                        "id": 7363,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "11431:8:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_payable_$",
                          "typeString": "type(address payable)"
                        },
                        "typeName": {
                          "id": 7362,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "11431:8:10",
                          "stateMutability": "payable",
                          "typeDescriptions": {
                            "typeIdentifier": null,
                            "typeString": null
                          }
                        }
                      },
                      "id": 7368,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "11431:22:10",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "id": 7369,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "balance",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": null,
                    "src": "11431:30:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 7361,
                  "id": 7370,
                  "nodeType": "Return",
                  "src": "11424:37:10"
                }
              ]
            },
            "documentation": null,
            "id": 7372,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "balance",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 7358,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "11385:2:10"
            },
            "returnParameters": {
              "id": 7361,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7360,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 7372,
                  "src": "11411:7:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7359,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "11411:7:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11410:9:10"
            },
            "scope": 7377,
            "src": "11369:96:10",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 7375,
              "nodeType": "Block",
              "src": "11495:2:10",
              "statements": []
            },
            "documentation": null,
            "id": 7376,
            "implemented": true,
            "kind": "receive",
            "modifiers": [],
            "name": "",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 7373,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "11475:2:10"
            },
            "returnParameters": {
              "id": 7374,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "11495:0:10"
            },
            "scope": 7377,
            "src": "11468:29:10",
            "stateMutability": "payable",
            "virtual": false,
            "visibility": "external"
          }
        ],
        "scope": 7378,
        "src": "1099:10400:10"
      }
    ],
    "src": "33:11467:10"
  },
  "legacyAST": {
    "absolutePath": "/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/upgradables/contracts/staking/FuseStakingV3.sol",
    "exportedSymbols": {
      "FuseStakingV3": [
        7377
      ],
      "IConsensus": [
        6164
      ]
    },
    "id": 7378,
    "license": "MIT",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 6127,
        "literals": [
          "solidity",
          ">=",
          "0.6"
        ],
        "nodeType": "PragmaDirective",
        "src": "33:22:10"
      },
      {
        "id": 6128,
        "literals": [
          "experimental",
          "ABIEncoderV2"
        ],
        "nodeType": "PragmaDirective",
        "src": "56:33:10"
      },
      {
        "absolutePath": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol",
        "file": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol",
        "id": 6129,
        "nodeType": "ImportDirective",
        "scope": 7378,
        "sourceUnit": 8212,
        "src": "90:69:10",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol",
        "file": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol",
        "id": 6130,
        "nodeType": "ImportDirective",
        "scope": 7378,
        "sourceUnit": 7874,
        "src": "160:75:10",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol",
        "file": "@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol",
        "id": 6131,
        "nodeType": "ImportDirective",
        "scope": 7378,
        "sourceUnit": 8141,
        "src": "236:74:10",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/upgradables/contracts/utils/DSMath.sol",
        "file": "../utils/DSMath.sol",
        "id": 6132,
        "nodeType": "ImportDirective",
        "scope": 7378,
        "sourceUnit": 7699,
        "src": "312:29:10",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/upgradables/contracts/Interfaces.sol",
        "file": "../Interfaces.sol",
        "id": 6133,
        "nodeType": "ImportDirective",
        "scope": 7378,
        "sourceUnit": 552,
        "src": "343:27:10",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "interface",
        "documentation": null,
        "fullyImplemented": false,
        "id": 6164,
        "linearizedBaseContracts": [
          6164
        ],
        "name": "IConsensus",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": null,
            "documentation": {
              "id": 6134,
              "nodeType": "StructuredDocumentation",
              "src": "396:120:10",
              "text": " @dev delegate to a validator\n @param _validator the address of the validator msg.sender is delegating to"
            },
            "functionSelector": "5c19a95c",
            "id": 6139,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "delegate",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 6137,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6136,
                  "mutability": "mutable",
                  "name": "_validator",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6139,
                  "src": "536:18:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6135,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "536:7:10",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "535:20:10"
            },
            "returnParameters": {
              "id": 6138,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "572:0:10"
            },
            "scope": 6164,
            "src": "518:55:10",
            "stateMutability": "payable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": {
              "id": 6140,
              "nodeType": "StructuredDocumentation",
              "src": "576:275:10",
              "text": " @dev Function to be called when a delegator whishes to withdraw some of his staked funds for a validator\n @param _validator the address of the validator msg.sender has delegating to\n @param _amount the amount msg.sender wishes to withdraw from the contract"
            },
            "functionSelector": "f3fef3a3",
            "id": 6147,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "withdraw",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 6145,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6142,
                  "mutability": "mutable",
                  "name": "_validator",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6147,
                  "src": "871:18:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6141,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "871:7:10",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6144,
                  "mutability": "mutable",
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6147,
                  "src": "891:15:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 6143,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "891:7:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "870:37:10"
            },
            "returnParameters": {
              "id": 6146,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "916:0:10"
            },
            "scope": 6164,
            "src": "853:64:10",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": null,
            "functionSelector": "21429e60",
            "id": 6156,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "delegatedAmount",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 6152,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6149,
                  "mutability": "mutable",
                  "name": "_address",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6156,
                  "src": "945:16:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6148,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "945:7:10",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6151,
                  "mutability": "mutable",
                  "name": "_validator",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6156,
                  "src": "963:18:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6150,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "963:7:10",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "944:38:10"
            },
            "returnParameters": {
              "id": 6155,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6154,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6156,
                  "src": "1012:7:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 6153,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1012:7:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1011:9:10"
            },
            "scope": 6164,
            "src": "920:101:10",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": null,
            "functionSelector": "bf135267",
            "id": 6163,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "stakeAmount",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 6159,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6158,
                  "mutability": "mutable",
                  "name": "_address",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6163,
                  "src": "1045:16:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6157,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1045:7:10",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1044:18:10"
            },
            "returnParameters": {
              "id": 6162,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6161,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6163,
                  "src": "1086:7:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 6160,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1086:7:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1085:9:10"
            },
            "scope": 6164,
            "src": "1024:71:10",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          }
        ],
        "scope": 7378,
        "src": "372:725:10"
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 6165,
              "name": "Initializable",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 8211,
              "src": "1125:13:10",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Initializable_$8211",
                "typeString": "contract Initializable"
              }
            },
            "id": 6166,
            "nodeType": "InheritanceSpecifier",
            "src": "1125:13:10"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 6167,
              "name": "OwnableUpgradeable",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 7873,
              "src": "1140:18:10",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_OwnableUpgradeable_$7873",
                "typeString": "contract OwnableUpgradeable"
              }
            },
            "id": 6168,
            "nodeType": "InheritanceSpecifier",
            "src": "1140:18:10"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 6169,
              "name": "DSMath",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 7698,
              "src": "1160:6:10",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_DSMath_$7698",
                "typeString": "contract DSMath"
              }
            },
            "id": 6170,
            "nodeType": "InheritanceSpecifier",
            "src": "1160:6:10"
          }
        ],
        "contractDependencies": [
          7698,
          7743,
          7873,
          8211
        ],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 7377,
        "linearizedBaseContracts": [
          7377,
          7698,
          7873,
          7743,
          8211
        ],
        "name": "FuseStakingV3",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "id": 6173,
            "libraryName": {
              "contractScope": null,
              "id": 6171,
              "name": "SafeMathUpgradeable",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 8140,
              "src": "1176:19:10",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_SafeMathUpgradeable_$8140",
                "typeString": "library SafeMathUpgradeable"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "1170:38:10",
            "typeName": {
              "id": 6172,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1200:7:10",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            }
          },
          {
            "constant": false,
            "functionSelector": "9168ae72",
            "id": 6177,
            "mutability": "mutable",
            "name": "stakers",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 7377,
            "src": "1211:42:10",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
              "typeString": "mapping(address => uint256)"
            },
            "typeName": {
              "id": 6176,
              "keyType": {
                "id": 6174,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "1219:7:10",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "1211:27:10",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                "typeString": "mapping(address => uint256)"
              },
              "valueType": {
                "id": 6175,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "1230:7:10",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "35aa2e44",
            "id": 6180,
            "mutability": "mutable",
            "name": "validators",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 7377,
            "src": "1256:27:10",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_array$_t_address_$dyn_storage",
              "typeString": "address[]"
            },
            "typeName": {
              "baseType": {
                "id": 6178,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "1256:7:10",
                "stateMutability": "nonpayable",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "id": 6179,
              "length": null,
              "nodeType": "ArrayTypeName",
              "src": "1256:9:10",
              "typeDescriptions": {
                "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                "typeString": "address[]"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "8ef3f761",
            "id": 6182,
            "mutability": "mutable",
            "name": "consensus",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 7377,
            "src": "1287:27:10",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_IConsensus_$6164",
              "typeString": "contract IConsensus"
            },
            "typeName": {
              "contractScope": null,
              "id": 6181,
              "name": "IConsensus",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 6164,
              "src": "1287:10:10",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IConsensus_$6164",
                "typeString": "contract IConsensus"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "2681f7e4",
            "id": 6184,
            "mutability": "mutable",
            "name": "uniswap",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 7377,
            "src": "1318:22:10",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_Uniswap_$444",
              "typeString": "contract Uniswap"
            },
            "typeName": {
              "contractScope": null,
              "id": 6183,
              "name": "Uniswap",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 444,
              "src": "1318:7:10",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Uniswap_$444",
                "typeString": "contract Uniswap"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "3fb1ccf1",
            "id": 6186,
            "mutability": "mutable",
            "name": "GD",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 7377,
            "src": "1343:20:10",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_GoodDollar_$330",
              "typeString": "contract GoodDollar"
            },
            "typeName": {
              "contractScope": null,
              "id": 6185,
              "name": "GoodDollar",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 330,
              "src": "1343:10:10",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_GoodDollar_$330",
                "typeString": "contract GoodDollar"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "81028f67",
            "id": 6188,
            "mutability": "mutable",
            "name": "ubischeme",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 7377,
            "src": "1366:26:10",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_UBIScheme_$519",
              "typeString": "contract UBIScheme"
            },
            "typeName": {
              "contractScope": null,
              "id": 6187,
              "name": "UBIScheme",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 519,
              "src": "1366:9:10",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_UBIScheme_$519",
                "typeString": "contract UBIScheme"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "8bdb2afa",
            "id": 6190,
            "mutability": "mutable",
            "name": "uniswapFactory",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 7377,
            "src": "1395:36:10",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_UniswapFactory_$454",
              "typeString": "contract UniswapFactory"
            },
            "typeName": {
              "contractScope": null,
              "id": 6189,
              "name": "UniswapFactory",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 454,
              "src": "1395:14:10",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_UniswapFactory_$454",
                "typeString": "contract UniswapFactory"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "c816841b",
            "id": 6192,
            "mutability": "mutable",
            "name": "uniswapPair",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 7377,
            "src": "1434:30:10",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_UniswapPair_$469",
              "typeString": "contract UniswapPair"
            },
            "typeName": {
              "contractScope": null,
              "id": 6191,
              "name": "UniswapPair",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 469,
              "src": "1434:11:10",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_UniswapPair_$469",
                "typeString": "contract UniswapPair"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "8918c4a2",
            "id": 6194,
            "mutability": "mutable",
            "name": "lastDayCollected",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 7377,
            "src": "1468:31:10",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 6193,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1468:7:10",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "6021a9d5",
            "id": 6196,
            "mutability": "mutable",
            "name": "stakeBackRatio",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 7377,
            "src": "1528:29:10",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 6195,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1528:7:10",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "04d26ebf",
            "id": 6198,
            "mutability": "mutable",
            "name": "maxSlippageRatio",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 7377,
            "src": "1560:31:10",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 6197,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1560:7:10",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "150d7e47",
            "id": 6200,
            "mutability": "mutable",
            "name": "keeperFeeRatio",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 7377,
            "src": "1594:29:10",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 6199,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1594:7:10",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "c11a5630",
            "id": 6202,
            "mutability": "mutable",
            "name": "RATIO_BASE",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 7377,
            "src": "1626:25:10",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 6201,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1626:7:10",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "d22e9b06",
            "id": 6204,
            "mutability": "mutable",
            "name": "communityPoolRatio",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 7377,
            "src": "1654:33:10",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 6203,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1654:7:10",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 6206,
            "mutability": "mutable",
            "name": "communityPoolBalance",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 7377,
            "src": "1736:28:10",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 6205,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1736:7:10",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 6208,
            "mutability": "mutable",
            "name": "pendingFuseEarnings",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 7377,
            "src": "1767:27:10",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 6207,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1767:7:10",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 6226,
            "name": "UBICollected",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 6225,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6210,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "currentDay",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6226,
                  "src": "1861:26:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 6209,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1861:7:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6212,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "ubi",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6226,
                  "src": "1891:11:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 6211,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1891:7:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6214,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "communityPool",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6226,
                  "src": "1929:21:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 6213,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1929:7:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6216,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "gdBought",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6226,
                  "src": "1973:16:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 6215,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1973:7:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6218,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "stakingRewards",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6226,
                  "src": "2065:22:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 6217,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2065:7:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6220,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "pendingFuseEarnings",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6226,
                  "src": "2135:27:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 6219,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2135:7:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6222,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "keeper",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6226,
                  "src": "2217:14:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6221,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2217:7:10",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6224,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "keeperGDFee",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6226,
                  "src": "2235:19:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 6223,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2235:7:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1857:400:10"
            },
            "src": "1839:419:10"
          },
          {
            "body": {
              "id": 6253,
              "nodeType": "Block",
              "src": "2332:192:10",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 6232,
                      "name": "__Ownable_init_unchained",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7796,
                      "src": "2336:24:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 6233,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2336:26:10",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6234,
                  "nodeType": "ExpressionStatement",
                  "src": "2336:26:10"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 6242,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 6235,
                      "name": "consensus",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6182,
                      "src": "2366:9:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IConsensus_$6164",
                        "typeString": "contract IConsensus"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "307833303134636131306239316362334430414438356645663741334362393542434163396330663739",
                              "id": 6239,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2401:42:10",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              "value": "0x3014ca10b91cb3D0AD85fEf7A3Cb95BCAc9c0f79"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            ],
                            "id": 6238,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "2393:7:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 6237,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "2393:7:10",
                              "typeDescriptions": {
                                "typeIdentifier": null,
                                "typeString": null
                              }
                            }
                          },
                          "id": 6240,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2393:51:10",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 6236,
                        "name": "IConsensus",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6164,
                        "src": "2378:10:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_IConsensus_$6164_$",
                          "typeString": "type(contract IConsensus)"
                        }
                      },
                      "id": 6241,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2378:70:10",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IConsensus_$6164",
                        "typeString": "contract IConsensus"
                      }
                    },
                    "src": "2366:82:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IConsensus_$6164",
                      "typeString": "contract IConsensus"
                    }
                  },
                  "id": 6243,
                  "nodeType": "ExpressionStatement",
                  "src": "2366:82:10"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "307863623837364133393346303561363637376138613032396631433644373630334234313643304136",
                            "id": 6249,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2476:42:10",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            },
                            "value": "0xcb876A393F05a6677a8a029f1C6D7603B416C0A6"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          ],
                          "id": 6248,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "2468:7:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 6247,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "2468:7:10",
                            "typeDescriptions": {
                              "typeIdentifier": null,
                              "typeString": null
                            }
                          }
                        },
                        "id": 6250,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2468:51:10",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 6244,
                        "name": "validators",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6180,
                        "src": "2452:10:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_storage",
                          "typeString": "address[] storage ref"
                        }
                      },
                      "id": 6246,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "push",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "2452:15:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_arraypush_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 6251,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2452:68:10",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6252,
                  "nodeType": "ExpressionStatement",
                  "src": "2452:68:10"
                }
              ]
            },
            "documentation": {
              "id": 6227,
              "nodeType": "StructuredDocumentation",
              "src": "2261:28:10",
              "text": " @dev initialize"
            },
            "functionSelector": "8129fc1c",
            "id": 6254,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 6230,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 6229,
                  "name": "initializer",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 8188,
                  "src": "2320:11:10",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2320:11:10"
              }
            ],
            "name": "initialize",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 6228,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2310:2:10"
            },
            "returnParameters": {
              "id": 6231,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2332:0:10"
            },
            "scope": 7377,
            "src": "2291:233:10",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 6282,
              "nodeType": "Block",
              "src": "2554:199:10",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 6259,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 6257,
                      "name": "RATIO_BASE",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6202,
                      "src": "2562:10:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 6258,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2576:1:10",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "2562:15:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 6281,
                  "nodeType": "IfStatement",
                  "src": "2558:192:10",
                  "trueBody": {
                    "id": 6280,
                    "nodeType": "Block",
                    "src": "2579:171:10",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 6262,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 6260,
                            "name": "stakeBackRatio",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6196,
                            "src": "2584:14:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "3333333333",
                            "id": 6261,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2601:5:10",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_33333_by_1",
                              "typeString": "int_const 33333"
                            },
                            "value": "33333"
                          },
                          "src": "2584:22:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 6263,
                        "nodeType": "ExpressionStatement",
                        "src": "2584:22:10"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 6266,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 6264,
                            "name": "communityPoolRatio",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6204,
                            "src": "2617:18:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "3333333333",
                            "id": 6265,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2638:5:10",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_33333_by_1",
                              "typeString": "int_const 33333"
                            },
                            "value": "33333"
                          },
                          "src": "2617:26:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 6267,
                        "nodeType": "ExpressionStatement",
                        "src": "2617:26:10"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 6270,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 6268,
                            "name": "maxSlippageRatio",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6198,
                            "src": "2654:16:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "33303030",
                            "id": 6269,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2673:4:10",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_3000_by_1",
                              "typeString": "int_const 3000"
                            },
                            "value": "3000"
                          },
                          "src": "2654:23:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 6271,
                        "nodeType": "ExpressionStatement",
                        "src": "2654:23:10"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 6274,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 6272,
                            "name": "keeperFeeRatio",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6200,
                            "src": "2687:14:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "3330",
                            "id": 6273,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2704:2:10",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_30_by_1",
                              "typeString": "int_const 30"
                            },
                            "value": "30"
                          },
                          "src": "2687:19:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 6275,
                        "nodeType": "ExpressionStatement",
                        "src": "2687:19:10"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 6278,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 6276,
                            "name": "RATIO_BASE",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6202,
                            "src": "2719:10:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "313030303030",
                            "id": 6277,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2732:6:10",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_100000_by_1",
                              "typeString": "int_const 100000"
                            },
                            "value": "100000"
                          },
                          "src": "2719:19:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 6279,
                        "nodeType": "ExpressionStatement",
                        "src": "2719:19:10"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": null,
            "functionSelector": "6711281c",
            "id": 6283,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "upgrade0",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 6255,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2544:2:10"
            },
            "returnParameters": {
              "id": 6256,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2554:0:10"
            },
            "scope": 7377,
            "src": "2527:226:10",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 6352,
              "nodeType": "Block",
              "src": "2841:391:10",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 6300,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 6294,
                          "name": "uniswapPair",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6192,
                          "src": "2857:11:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_UniswapPair_$469",
                            "typeString": "contract UniswapPair"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_UniswapPair_$469",
                            "typeString": "contract UniswapPair"
                          }
                        ],
                        "id": 6293,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "2849:7:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": {
                          "id": 6292,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2849:7:10",
                          "typeDescriptions": {
                            "typeIdentifier": null,
                            "typeString": null
                          }
                        }
                      },
                      "id": 6295,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2849:20:10",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 6298,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "2881:1:10",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          }
                        ],
                        "id": 6297,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "2873:7:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": {
                          "id": 6296,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2873:7:10",
                          "typeDescriptions": {
                            "typeIdentifier": null,
                            "typeString": null
                          }
                        }
                      },
                      "id": 6299,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2873:10:10",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "2849:34:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 6351,
                  "nodeType": "IfStatement",
                  "src": "2845:384:10",
                  "trueBody": {
                    "id": 6350,
                    "nodeType": "Block",
                    "src": "2885:344:10",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 6313,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 6301,
                            "name": "uniswap",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6184,
                            "src": "2890:7:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_Uniswap_$444",
                              "typeString": "contract Uniswap"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "condition": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  "id": 6308,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "id": 6303,
                                    "name": "_uniswap",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6289,
                                    "src": "2913:8:10",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "==",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "hexValue": "30",
                                        "id": 6306,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "2933:1:10",
                                        "subdenomination": null,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_0_by_1",
                                          "typeString": "int_const 0"
                                        },
                                        "value": "0"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_rational_0_by_1",
                                          "typeString": "int_const 0"
                                        }
                                      ],
                                      "id": 6305,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "nodeType": "ElementaryTypeNameExpression",
                                      "src": "2925:7:10",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_address_$",
                                        "typeString": "type(address)"
                                      },
                                      "typeName": {
                                        "id": 6304,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2925:7:10",
                                        "typeDescriptions": {
                                          "typeIdentifier": null,
                                          "typeString": null
                                        }
                                      }
                                    },
                                    "id": 6307,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "2925:10:10",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address_payable",
                                      "typeString": "address payable"
                                    }
                                  },
                                  "src": "2913:22:10",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "falseExpression": {
                                  "argumentTypes": null,
                                  "id": 6310,
                                  "name": "_uniswap",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6289,
                                  "src": "2993:8:10",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "id": 6311,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "Conditional",
                                "src": "2913:88:10",
                                "trueExpression": {
                                  "argumentTypes": null,
                                  "hexValue": "307846423736653945376438384533303861423533303333306544393065383461393532353730333139",
                                  "id": 6309,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "2943:42:10",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address_payable",
                                    "typeString": "address payable"
                                  },
                                  "value": "0xFB76e9E7d88E308aB530330eD90e84a952570319"
                                },
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 6302,
                              "name": "Uniswap",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 444,
                              "src": "2900:7:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_Uniswap_$444_$",
                                "typeString": "type(contract Uniswap)"
                              }
                            },
                            "id": 6312,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2900:106:10",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_Uniswap_$444",
                              "typeString": "contract Uniswap"
                            }
                          },
                          "src": "2890:116:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_Uniswap_$444",
                            "typeString": "contract Uniswap"
                          }
                        },
                        "id": 6314,
                        "nodeType": "ExpressionStatement",
                        "src": "2890:116:10"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 6319,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 6315,
                            "name": "GD",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6186,
                            "src": "3011:2:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_GoodDollar_$330",
                              "typeString": "contract GoodDollar"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 6317,
                                "name": "_gd",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6285,
                                "src": "3027:3:10",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 6316,
                              "name": "GoodDollar",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 330,
                              "src": "3016:10:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_GoodDollar_$330_$",
                                "typeString": "type(contract GoodDollar)"
                              }
                            },
                            "id": 6318,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3016:15:10",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_GoodDollar_$330",
                              "typeString": "contract GoodDollar"
                            }
                          },
                          "src": "3011:20:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_GoodDollar_$330",
                            "typeString": "contract GoodDollar"
                          }
                        },
                        "id": 6320,
                        "nodeType": "ExpressionStatement",
                        "src": "3011:20:10"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 6325,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 6321,
                            "name": "ubischeme",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6188,
                            "src": "3036:9:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_UBIScheme_$519",
                              "typeString": "contract UBIScheme"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 6323,
                                "name": "_ubischeme",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6287,
                                "src": "3058:10:10",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 6322,
                              "name": "UBIScheme",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 519,
                              "src": "3048:9:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_UBIScheme_$519_$",
                                "typeString": "type(contract UBIScheme)"
                              }
                            },
                            "id": 6324,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3048:21:10",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_UBIScheme_$519",
                              "typeString": "contract UBIScheme"
                            }
                          },
                          "src": "3036:33:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_UBIScheme_$519",
                            "typeString": "contract UBIScheme"
                          }
                        },
                        "id": 6326,
                        "nodeType": "ExpressionStatement",
                        "src": "3036:33:10"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 6333,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 6327,
                            "name": "uniswapFactory",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6190,
                            "src": "3075:14:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_UniswapFactory_$454",
                              "typeString": "contract UniswapFactory"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 6329,
                                    "name": "uniswap",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6184,
                                    "src": "3107:7:10",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_Uniswap_$444",
                                      "typeString": "contract Uniswap"
                                    }
                                  },
                                  "id": 6330,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "factory",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 410,
                                  "src": "3107:15:10",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_pure$__$returns$_t_address_$",
                                    "typeString": "function () pure external returns (address)"
                                  }
                                },
                                "id": 6331,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "3107:17:10",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 6328,
                              "name": "UniswapFactory",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 454,
                              "src": "3092:14:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_UniswapFactory_$454_$",
                                "typeString": "type(contract UniswapFactory)"
                              }
                            },
                            "id": 6332,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3092:33:10",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_UniswapFactory_$454",
                              "typeString": "contract UniswapFactory"
                            }
                          },
                          "src": "3075:50:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_UniswapFactory_$454",
                            "typeString": "contract UniswapFactory"
                          }
                        },
                        "id": 6334,
                        "nodeType": "ExpressionStatement",
                        "src": "3075:50:10"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 6345,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 6335,
                            "name": "uniswapPair",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6192,
                            "src": "3130:11:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_UniswapPair_$469",
                              "typeString": "contract UniswapPair"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "arguments": [],
                                    "expression": {
                                      "argumentTypes": [],
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 6339,
                                        "name": "uniswap",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6184,
                                        "src": "3184:7:10",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_contract$_Uniswap_$444",
                                          "typeString": "contract Uniswap"
                                        }
                                      },
                                      "id": 6340,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "WETH",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 405,
                                      "src": "3184:12:10",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_external_pure$__$returns$_t_address_$",
                                        "typeString": "function () pure external returns (address)"
                                      }
                                    },
                                    "id": 6341,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "3184:14:10",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 6342,
                                    "name": "_gd",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6285,
                                    "src": "3200:3:10",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 6337,
                                    "name": "uniswapFactory",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6190,
                                    "src": "3161:14:10",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_UniswapFactory_$454",
                                      "typeString": "contract UniswapFactory"
                                    }
                                  },
                                  "id": 6338,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "getPair",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 453,
                                  "src": "3161:22:10",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$returns$_t_address_$",
                                    "typeString": "function (address,address) view external returns (address)"
                                  }
                                },
                                "id": 6343,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "3161:43:10",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 6336,
                              "name": "UniswapPair",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 469,
                              "src": "3144:11:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_UniswapPair_$469_$",
                                "typeString": "type(contract UniswapPair)"
                              }
                            },
                            "id": 6344,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3144:65:10",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_UniswapPair_$469",
                              "typeString": "contract UniswapPair"
                            }
                          },
                          "src": "3130:79:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_UniswapPair_$469",
                            "typeString": "contract UniswapPair"
                          }
                        },
                        "id": 6346,
                        "nodeType": "ExpressionStatement",
                        "src": "3130:79:10"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 6347,
                            "name": "upgrade0",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6283,
                            "src": "3214:8:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                              "typeString": "function ()"
                            }
                          },
                          "id": 6348,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3214:10:10",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6349,
                        "nodeType": "ExpressionStatement",
                        "src": "3214:10:10"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": null,
            "functionSelector": "47a1671a",
            "id": 6353,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "upgrade1",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 6290,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6285,
                  "mutability": "mutable",
                  "name": "_gd",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6353,
                  "src": "2777:11:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6284,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2777:7:10",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6287,
                  "mutability": "mutable",
                  "name": "_ubischeme",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6353,
                  "src": "2792:18:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6286,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2792:7:10",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6289,
                  "mutability": "mutable",
                  "name": "_uniswap",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6353,
                  "src": "2814:16:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6288,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2814:7:10",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2773:60:10"
            },
            "returnParameters": {
              "id": 6291,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2841:0:10"
            },
            "scope": 7377,
            "src": "2756:476:10",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 6365,
              "nodeType": "Block",
              "src": "3282:32:10",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 6361,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "3307:1:10",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            }
                          ],
                          "id": 6360,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "3299:7:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 6359,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "3299:7:10",
                            "typeDescriptions": {
                              "typeIdentifier": null,
                              "typeString": null
                            }
                          }
                        },
                        "id": 6362,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3299:10:10",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "id": 6358,
                      "name": "stake",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        6366,
                        6461
                      ],
                      "referencedDeclaration": 6461,
                      "src": "3293:5:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$_t_bool_$",
                        "typeString": "function (address) returns (bool)"
                      }
                    },
                    "id": 6363,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3293:17:10",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 6357,
                  "id": 6364,
                  "nodeType": "Return",
                  "src": "3286:24:10"
                }
              ]
            },
            "documentation": null,
            "functionSelector": "3a4b66f1",
            "id": 6366,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "stake",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 6354,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3249:2:10"
            },
            "returnParameters": {
              "id": 6357,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6356,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6366,
                  "src": "3276:4:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 6355,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "3276:4:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3275:6:10"
            },
            "scope": 7377,
            "src": "3235:79:10",
            "stateMutability": "payable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 6460,
              "nodeType": "Block",
              "src": "3382:521:10",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 6377,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 6374,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "3394:3:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 6375,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "value",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "3394:9:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 6376,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "3406:1:10",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "3394:13:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "7374616b65206d757374206265203e2030",
                        "id": 6378,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3409:19:10",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_d643be80d2eeac28902a8588bd6b03a785ede3db490f389745a1589776aac4b9",
                          "typeString": "literal_string \"stake must be > 0\""
                        },
                        "value": "stake must be > 0"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_d643be80d2eeac28902a8588bd6b03a785ede3db490f389745a1589776aac4b9",
                          "typeString": "literal_string \"stake must be > 0\""
                        }
                      ],
                      "id": 6373,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "3386:7:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 6379,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3386:43:10",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6380,
                  "nodeType": "ExpressionStatement",
                  "src": "3386:43:10"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 6385,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 6382,
                            "name": "validators",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6180,
                            "src": "3441:10:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_address_$dyn_storage",
                              "typeString": "address[] storage ref"
                            }
                          },
                          "id": 6383,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "3441:17:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 6384,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "3461:1:10",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "3441:21:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "6e6f20617070726f7665642076616c696461746f7273",
                        "id": 6386,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3464:24:10",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_e67b2827f376c1cd6acc7a57dc272088230cbd854234d0d2a2421e53bbd0f1ff",
                          "typeString": "literal_string \"no approved validators\""
                        },
                        "value": "no approved validators"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_e67b2827f376c1cd6acc7a57dc272088230cbd854234d0d2a2421e53bbd0f1ff",
                          "typeString": "literal_string \"no approved validators\""
                        }
                      ],
                      "id": 6381,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "3433:7:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 6387,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3433:56:10",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6388,
                  "nodeType": "ExpressionStatement",
                  "src": "3433:56:10"
                },
                {
                  "assignments": [
                    6390
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 6390,
                      "mutability": "mutable",
                      "name": "found",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 6460,
                      "src": "3493:10:10",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 6389,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "3493:4:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 6391,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3493:10:10"
                },
                {
                  "body": {
                    "id": 6422,
                    "nodeType": "Block",
                    "src": "3596:77:10",
                    "statements": [
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 6414,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 6410,
                              "name": "validators",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6180,
                              "src": "3605:10:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_address_$dyn_storage",
                                "typeString": "address[] storage ref"
                              }
                            },
                            "id": 6412,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 6411,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6393,
                              "src": "3616:1:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "3605:13:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 6413,
                            "name": "_validator",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6368,
                            "src": "3622:10:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "3605:27:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 6421,
                        "nodeType": "IfStatement",
                        "src": "3601:68:10",
                        "trueBody": {
                          "id": 6420,
                          "nodeType": "Block",
                          "src": "3634:35:10",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 6417,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 6415,
                                  "name": "found",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6390,
                                  "src": "3640:5:10",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "hexValue": "74727565",
                                  "id": 6416,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "bool",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "3648:4:10",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  },
                                  "value": "true"
                                },
                                "src": "3640:12:10",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 6418,
                              "nodeType": "ExpressionStatement",
                              "src": "3640:12:10"
                            },
                            {
                              "id": 6419,
                              "nodeType": "Break",
                              "src": "3658:5:10"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 6406,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "id": 6401,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 6396,
                        "name": "_validator",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6368,
                        "src": "3534:10:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "!=",
                      "rightExpression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 6399,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "3556:1:10",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            }
                          ],
                          "id": 6398,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "3548:7:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 6397,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "3548:7:10",
                            "typeDescriptions": {
                              "typeIdentifier": null,
                              "typeString": null
                            }
                          }
                        },
                        "id": 6400,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3548:10:10",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      "src": "3534:24:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 6405,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 6402,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6393,
                        "src": "3562:1:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "<",
                      "rightExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 6403,
                          "name": "validators",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6180,
                          "src": "3566:10:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_$dyn_storage",
                            "typeString": "address[] storage ref"
                          }
                        },
                        "id": 6404,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "length",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "3566:17:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "3562:21:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "3534:49:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 6423,
                  "initializationExpression": {
                    "assignments": [
                      6393
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 6393,
                        "mutability": "mutable",
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 6423,
                        "src": "3516:9:10",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 6392,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3516:7:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 6395,
                    "initialValue": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 6394,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3528:1:10",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "3516:13:10"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 6408,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "3588:3:10",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 6407,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6393,
                        "src": "3588:1:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 6409,
                    "nodeType": "ExpressionStatement",
                    "src": "3588:3:10"
                  },
                  "nodeType": "ForStatement",
                  "src": "3507:166:10"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 6432,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 6430,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 6425,
                            "name": "_validator",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6368,
                            "src": "3688:10:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 6428,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "3710:1:10",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                }
                              ],
                              "id": 6427,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "3702:7:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 6426,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "3702:7:10",
                                "typeDescriptions": {
                                  "typeIdentifier": null,
                                  "typeString": null
                                }
                              }
                            },
                            "id": 6429,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3702:10:10",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          "src": "3688:24:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "||",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 6431,
                          "name": "found",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6390,
                          "src": "3716:5:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "3688:33:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "76616c696461746f72206e6f7420696e20617070726f766564206c697374",
                        "id": 6433,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3726:32:10",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_ec996bb6370a70d3201c5fcf446442917423f96aa5e12b18280020833d5b0cc5",
                          "typeString": "literal_string \"validator not in approved list\""
                        },
                        "value": "validator not in approved list"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_ec996bb6370a70d3201c5fcf446442917423f96aa5e12b18280020833d5b0cc5",
                          "typeString": "literal_string \"validator not in approved list\""
                        }
                      ],
                      "id": 6424,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "3676:7:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 6434,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3676:86:10",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6435,
                  "nodeType": "ExpressionStatement",
                  "src": "3676:86:10"
                },
                {
                  "assignments": [
                    6437
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 6437,
                      "mutability": "mutable",
                      "name": "staked",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 6460,
                      "src": "3767:11:10",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 6436,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "3767:4:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 6443,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 6439,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "3800:3:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 6440,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "value",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "3800:9:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6441,
                        "name": "_validator",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6368,
                        "src": "3811:10:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 6438,
                      "name": "stakeNextValidator",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6760,
                      "src": "3781:18:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_address_$returns$_t_bool_$",
                        "typeString": "function (uint256,address) returns (bool)"
                      }
                    },
                    "id": 6442,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3781:41:10",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3767:55:10"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 6456,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 6444,
                        "name": "stakers",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6177,
                        "src": "3826:7:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 6447,
                      "indexExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 6445,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "3834:3:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 6446,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "3834:10:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "3826:19:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 6453,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "3872:3:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 6454,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "value",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "3872:9:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 6448,
                            "name": "stakers",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6177,
                            "src": "3848:7:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 6451,
                          "indexExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 6449,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -15,
                              "src": "3856:3:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 6450,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "3856:10:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "3848:19:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 6452,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "add",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7973,
                        "src": "3848:23:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                          "typeString": "function (uint256,uint256) pure returns (uint256)"
                        }
                      },
                      "id": 6455,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "3848:34:10",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3826:56:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 6457,
                  "nodeType": "ExpressionStatement",
                  "src": "3826:56:10"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 6458,
                    "name": "staked",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 6437,
                    "src": "3893:6:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 6372,
                  "id": 6459,
                  "nodeType": "Return",
                  "src": "3886:13:10"
                }
              ]
            },
            "documentation": null,
            "functionSelector": "26476204",
            "id": 6461,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "stake",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 6369,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6368,
                  "mutability": "mutable",
                  "name": "_validator",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6461,
                  "src": "3332:18:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6367,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3332:7:10",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3331:20:10"
            },
            "returnParameters": {
              "id": 6372,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6371,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6461,
                  "src": "3376:4:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 6370,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "3376:4:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3375:6:10"
            },
            "scope": 7377,
            "src": "3317:586:10",
            "stateMutability": "payable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 6472,
              "nodeType": "Block",
              "src": "3971:30:10",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 6468,
                      "name": "stakers",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6177,
                      "src": "3982:7:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                        "typeString": "mapping(address => uint256)"
                      }
                    },
                    "id": 6470,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 6469,
                      "name": "_owner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6463,
                      "src": "3990:6:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "3982:15:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 6467,
                  "id": 6471,
                  "nodeType": "Return",
                  "src": "3975:22:10"
                }
              ]
            },
            "documentation": null,
            "functionSelector": "70a08231",
            "id": 6473,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "balanceOf",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 6464,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6463,
                  "mutability": "mutable",
                  "name": "_owner",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6473,
                  "src": "3925:14:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6462,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3925:7:10",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3924:16:10"
            },
            "returnParameters": {
              "id": 6467,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6466,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6473,
                  "src": "3962:7:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 6465,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3962:7:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3961:9:10"
            },
            "scope": 7377,
            "src": "3906:95:10",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 6638,
              "nodeType": "Block",
              "src": "4063:1102:10",
              "statements": [
                {
                  "assignments": [
                    6481
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 6481,
                      "mutability": "mutable",
                      "name": "effectiveBalance",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 6638,
                      "src": "4067:24:10",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 6480,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "4067:7:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 6484,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 6482,
                      "name": "balance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7372,
                      "src": "4094:7:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                        "typeString": "function () view returns (uint256)"
                      }
                    },
                    "id": 6483,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4094:9:10",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4067:36:10"
                },
                {
                  "assignments": [
                    6486
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 6486,
                      "mutability": "mutable",
                      "name": "toWithdraw",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 6638,
                      "src": "4136:18:10",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 6485,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "4136:7:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 6496,
                  "initialValue": {
                    "argumentTypes": null,
                    "condition": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 6489,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 6487,
                        "name": "_value",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6475,
                        "src": "4157:6:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 6488,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4167:1:10",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "4157:11:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseExpression": {
                      "argumentTypes": null,
                      "id": 6494,
                      "name": "_value",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6475,
                      "src": "4193:6:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 6495,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "Conditional",
                    "src": "4157:42:10",
                    "trueExpression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 6490,
                        "name": "stakers",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6177,
                        "src": "4171:7:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 6493,
                      "indexExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 6491,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "4179:3:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 6492,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "4179:10:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "4171:19:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4136:63:10"
                },
                {
                  "assignments": [
                    6498
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 6498,
                      "mutability": "mutable",
                      "name": "toCollect",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 6638,
                      "src": "4203:17:10",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 6497,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "4203:7:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 6500,
                  "initialValue": {
                    "argumentTypes": null,
                    "id": 6499,
                    "name": "toWithdraw",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 6486,
                    "src": "4223:10:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4203:30:10"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 6511,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 6504,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 6502,
                            "name": "toWithdraw",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6486,
                            "src": "4249:10:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 6503,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "4262:1:10",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "4249:14:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 6510,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 6505,
                            "name": "toWithdraw",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6486,
                            "src": "4267:10:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 6506,
                              "name": "stakers",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6177,
                              "src": "4281:7:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 6509,
                            "indexExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 6507,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "4289:3:10",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 6508,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "4289:10:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "4281:19:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "4267:33:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "4249:51:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "696e76616c696420776974686472617720616d6f756e74",
                        "id": 6512,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4305:25:10",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_91fdcc465f3afd13a51e62c6ab234d15462a30e209c50104aaf3218361cd1f64",
                          "typeString": "literal_string \"invalid withdraw amount\""
                        },
                        "value": "invalid withdraw amount"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_91fdcc465f3afd13a51e62c6ab234d15462a30e209c50104aaf3218361cd1f64",
                          "typeString": "literal_string \"invalid withdraw amount\""
                        }
                      ],
                      "id": 6501,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "4237:7:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 6513,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4237:97:10",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6514,
                  "nodeType": "ExpressionStatement",
                  "src": "4237:97:10"
                },
                {
                  "assignments": [
                    6516
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 6516,
                      "mutability": "mutable",
                      "name": "perValidator",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 6638,
                      "src": "4338:20:10",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 6515,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "4338:7:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 6522,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 6519,
                          "name": "validators",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6180,
                          "src": "4372:10:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_$dyn_storage",
                            "typeString": "address[] storage ref"
                          }
                        },
                        "id": 6520,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "length",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "4372:17:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 6517,
                        "name": "_value",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6475,
                        "src": "4361:6:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 6518,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "div",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 8070,
                      "src": "4361:10:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 6521,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4361:29:10",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4338:52:10"
                },
                {
                  "body": {
                    "id": 6591,
                    "nodeType": "Block",
                    "src": "4442:367:10",
                    "statements": [
                      {
                        "assignments": [
                          6535
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 6535,
                            "mutability": "mutable",
                            "name": "cur",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 6591,
                            "src": "4447:11:10",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 6534,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "4447:7:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 6546,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 6540,
                                  "name": "this",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -28,
                                  "src": "4499:4:10",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_FuseStakingV3_$7377",
                                    "typeString": "contract FuseStakingV3"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_FuseStakingV3_$7377",
                                    "typeString": "contract FuseStakingV3"
                                  }
                                ],
                                "id": 6539,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "4491:7:10",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 6538,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "4491:7:10",
                                  "typeDescriptions": {
                                    "typeIdentifier": null,
                                    "typeString": null
                                  }
                                }
                              },
                              "id": 6541,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "4491:13:10",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 6542,
                                "name": "validators",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6180,
                                "src": "4506:10:10",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_address_$dyn_storage",
                                  "typeString": "address[] storage ref"
                                }
                              },
                              "id": 6544,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 6543,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6524,
                                "src": "4517:1:10",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "4506:13:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 6536,
                              "name": "consensus",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6182,
                              "src": "4465:9:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IConsensus_$6164",
                                "typeString": "contract IConsensus"
                              }
                            },
                            "id": 6537,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "delegatedAmount",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 6156,
                            "src": "4465:25:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$",
                              "typeString": "function (address,address) view external returns (uint256)"
                            }
                          },
                          "id": 6545,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4465:55:10",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "4447:73:10"
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 6549,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 6547,
                            "name": "cur",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6535,
                            "src": "4529:3:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 6548,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "4536:1:10",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "4529:8:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 6551,
                        "nodeType": "IfStatement",
                        "src": "4525:22:10",
                        "trueBody": {
                          "id": 6550,
                          "nodeType": "Continue",
                          "src": "4539:8:10"
                        }
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 6554,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 6552,
                            "name": "cur",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6535,
                            "src": "4556:3:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 6553,
                            "name": "perValidator",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6516,
                            "src": "4563:12:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "4556:19:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 6584,
                          "nodeType": "Block",
                          "src": "4670:105:10",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "baseExpression": {
                                      "argumentTypes": null,
                                      "id": 6571,
                                      "name": "validators",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6180,
                                      "src": "4696:10:10",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_address_$dyn_storage",
                                        "typeString": "address[] storage ref"
                                      }
                                    },
                                    "id": 6573,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "id": 6572,
                                      "name": "i",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6524,
                                      "src": "4707:1:10",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "4696:13:10",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 6574,
                                    "name": "perValidator",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6516,
                                    "src": "4711:12:10",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 6570,
                                  "name": "undelegateWithCatch",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7357,
                                  "src": "4676:19:10",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                                    "typeString": "function (address,uint256) returns (bool)"
                                  }
                                },
                                "id": 6575,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "4676:48:10",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 6576,
                              "nodeType": "ExpressionStatement",
                              "src": "4676:48:10"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 6582,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 6577,
                                  "name": "toCollect",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6498,
                                  "src": "4730:9:10",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 6580,
                                      "name": "perValidator",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6516,
                                      "src": "4756:12:10",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 6578,
                                      "name": "toCollect",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6498,
                                      "src": "4742:9:10",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 6579,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "sub",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 7990,
                                    "src": "4742:13:10",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                      "typeString": "function (uint256,uint256) pure returns (uint256)"
                                    }
                                  },
                                  "id": 6581,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "4742:27:10",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "4730:39:10",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 6583,
                              "nodeType": "ExpressionStatement",
                              "src": "4730:39:10"
                            }
                          ]
                        },
                        "id": 6585,
                        "nodeType": "IfStatement",
                        "src": "4552:223:10",
                        "trueBody": {
                          "id": 6569,
                          "nodeType": "Block",
                          "src": "4577:87:10",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "baseExpression": {
                                      "argumentTypes": null,
                                      "id": 6556,
                                      "name": "validators",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6180,
                                      "src": "4603:10:10",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_address_$dyn_storage",
                                        "typeString": "address[] storage ref"
                                      }
                                    },
                                    "id": 6558,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "id": 6557,
                                      "name": "i",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6524,
                                      "src": "4614:1:10",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "4603:13:10",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 6559,
                                    "name": "cur",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6535,
                                    "src": "4618:3:10",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 6555,
                                  "name": "undelegateWithCatch",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7357,
                                  "src": "4583:19:10",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                                    "typeString": "function (address,uint256) returns (bool)"
                                  }
                                },
                                "id": 6560,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "4583:39:10",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 6561,
                              "nodeType": "ExpressionStatement",
                              "src": "4583:39:10"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 6567,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 6562,
                                  "name": "toCollect",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6498,
                                  "src": "4628:9:10",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 6565,
                                      "name": "cur",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6535,
                                      "src": "4654:3:10",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 6563,
                                      "name": "toCollect",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6498,
                                      "src": "4640:9:10",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 6564,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "sub",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 7990,
                                    "src": "4640:13:10",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                      "typeString": "function (uint256,uint256) pure returns (uint256)"
                                    }
                                  },
                                  "id": 6566,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "4640:18:10",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "4628:30:10",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 6568,
                              "nodeType": "ExpressionStatement",
                              "src": "4628:30:10"
                            }
                          ]
                        }
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 6588,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 6586,
                            "name": "toCollect",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6498,
                            "src": "4783:9:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 6587,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "4796:1:10",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "4783:14:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 6590,
                        "nodeType": "IfStatement",
                        "src": "4779:25:10",
                        "trueBody": {
                          "id": 6589,
                          "nodeType": "Break",
                          "src": "4799:5:10"
                        }
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 6530,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 6527,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6524,
                      "src": "4414:1:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 6528,
                        "name": "validators",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6180,
                        "src": "4418:10:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_storage",
                          "typeString": "address[] storage ref"
                        }
                      },
                      "id": 6529,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "4418:17:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "4414:21:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 6592,
                  "initializationExpression": {
                    "assignments": [
                      6524
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 6524,
                        "mutability": "mutable",
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 6592,
                        "src": "4399:9:10",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 6523,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4399:7:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 6526,
                    "initialValue": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 6525,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "4411:1:10",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "4399:13:10"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 6532,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "4437:3:10",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 6531,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6524,
                        "src": "4437:1:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 6533,
                    "nodeType": "ExpressionStatement",
                    "src": "4437:3:10"
                  },
                  "nodeType": "ForStatement",
                  "src": "4394:415:10"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 6599,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 6593,
                      "name": "effectiveBalance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6481,
                      "src": "4813:16:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 6597,
                          "name": "effectiveBalance",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6481,
                          "src": "4846:16:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 6594,
                            "name": "balance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7372,
                            "src": "4832:7:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                              "typeString": "function () view returns (uint256)"
                            }
                          },
                          "id": 6595,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4832:9:10",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 6596,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sub",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7990,
                        "src": "4832:13:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                          "typeString": "function (uint256,uint256) pure returns (uint256)"
                        }
                      },
                      "id": 6598,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "4832:31:10",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "4813:50:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 6600,
                  "nodeType": "ExpressionStatement",
                  "src": "4813:50:10"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 6603,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 6601,
                      "name": "toWithdraw",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6486,
                      "src": "4945:10:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 6602,
                      "name": "effectiveBalance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6481,
                      "src": "4958:16:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "4945:29:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 6609,
                  "nodeType": "IfStatement",
                  "src": "4941:74:10",
                  "trueBody": {
                    "id": 6608,
                    "nodeType": "Block",
                    "src": "4976:39:10",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 6606,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 6604,
                            "name": "toWithdraw",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6486,
                            "src": "4981:10:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 6605,
                            "name": "effectiveBalance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6481,
                            "src": "4994:16:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "4981:29:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 6607,
                        "nodeType": "ExpressionStatement",
                        "src": "4981:29:10"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 6621,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 6610,
                        "name": "stakers",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6177,
                        "src": "5019:7:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 6613,
                      "indexExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 6611,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "5027:3:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 6612,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "5027:10:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "5019:19:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 6619,
                          "name": "toWithdraw",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6486,
                          "src": "5065:10:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 6614,
                            "name": "stakers",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6177,
                            "src": "5041:7:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 6617,
                          "indexExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 6615,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -15,
                              "src": "5049:3:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 6616,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "5049:10:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "5041:19:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 6618,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sub",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7990,
                        "src": "5041:23:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                          "typeString": "function (uint256,uint256) pure returns (uint256)"
                        }
                      },
                      "id": 6620,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "5041:35:10",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "5019:57:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 6622,
                  "nodeType": "ExpressionStatement",
                  "src": "5019:57:10"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 6625,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 6623,
                      "name": "toWithdraw",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6486,
                      "src": "5084:10:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 6624,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "5097:1:10",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "5084:14:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 6635,
                  "nodeType": "IfStatement",
                  "src": "5080:60:10",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 6632,
                          "name": "toWithdraw",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6486,
                          "src": "5129:10:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 6628,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "5108:3:10",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 6629,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "5108:10:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            ],
                            "id": 6627,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "5100:8:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_payable_$",
                              "typeString": "type(address payable)"
                            },
                            "typeName": {
                              "id": 6626,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "5100:8:10",
                              "stateMutability": "payable",
                              "typeDescriptions": {
                                "typeIdentifier": null,
                                "typeString": null
                              }
                            }
                          },
                          "id": 6630,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5100:19:10",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "id": 6631,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "transfer",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "5100:28:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_transfer_nonpayable$_t_uint256_$returns$__$",
                          "typeString": "function (uint256)"
                        }
                      },
                      "id": 6633,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "5100:40:10",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 6634,
                    "nodeType": "ExpressionStatement",
                    "src": "5100:40:10"
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 6636,
                    "name": "toWithdraw",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 6486,
                    "src": "5151:10:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 6479,
                  "id": 6637,
                  "nodeType": "Return",
                  "src": "5144:17:10"
                }
              ]
            },
            "documentation": null,
            "functionSelector": "2e1a7d4d",
            "id": 6639,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "withdraw",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 6476,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6475,
                  "mutability": "mutable",
                  "name": "_value",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6639,
                  "src": "4022:14:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 6474,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4022:7:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4021:16:10"
            },
            "returnParameters": {
              "id": 6479,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6478,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6639,
                  "src": "4054:7:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 6477,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4054:7:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4053:9:10"
            },
            "scope": 7377,
            "src": "4004:1161:10",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 6759,
              "nodeType": "Block",
              "src": "5261:655:10",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 6651,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 6648,
                        "name": "validators",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6180,
                        "src": "5269:10:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_storage",
                          "typeString": "address[] storage ref"
                        }
                      },
                      "id": 6649,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "5269:17:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 6650,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "5290:1:10",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "5269:22:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 6654,
                  "nodeType": "IfStatement",
                  "src": "5265:40:10",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "hexValue": "66616c7365",
                      "id": 6652,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "5300:5:10",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "false"
                    },
                    "functionReturnParameters": 6647,
                    "id": 6653,
                    "nodeType": "Return",
                    "src": "5293:12:10"
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 6660,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 6655,
                      "name": "_validator",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6643,
                      "src": "5313:10:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 6658,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "5335:1:10",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          }
                        ],
                        "id": 6657,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "5327:7:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": {
                          "id": 6656,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "5327:7:10",
                          "typeDescriptions": {
                            "typeIdentifier": null,
                            "typeString": null
                          }
                        }
                      },
                      "id": 6659,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "5327:10:10",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "5313:24:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 6672,
                  "nodeType": "IfStatement",
                  "src": "5309:103:10",
                  "trueBody": {
                    "id": 6671,
                    "nodeType": "Block",
                    "src": "5339:73:10",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 6666,
                              "name": "_validator",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6643,
                              "src": "5380:10:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 6661,
                                "name": "consensus",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6182,
                                "src": "5344:9:10",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_IConsensus_$6164",
                                  "typeString": "contract IConsensus"
                                }
                              },
                              "id": 6663,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "delegate",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 6139,
                              "src": "5344:18:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_payable$_t_address_$returns$__$",
                                "typeString": "function (address) payable external"
                              }
                            },
                            "id": 6665,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "names": [
                              "value"
                            ],
                            "nodeType": "FunctionCallOptions",
                            "options": [
                              {
                                "argumentTypes": null,
                                "id": 6664,
                                "name": "_value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6641,
                                "src": "5371:6:10",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "src": "5344:35:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_payable$_t_address_$returns$__$value",
                              "typeString": "function (address) payable external"
                            }
                          },
                          "id": 6667,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5344:47:10",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6668,
                        "nodeType": "ExpressionStatement",
                        "src": "5344:47:10"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "74727565",
                          "id": 6669,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "5403:4:10",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        },
                        "functionReturnParameters": 6647,
                        "id": 6670,
                        "nodeType": "Return",
                        "src": "5396:11:10"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    6674
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 6674,
                      "mutability": "mutable",
                      "name": "perValidator",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 6759,
                      "src": "5416:20:10",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 6673,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "5416:7:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 6684,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 6681,
                          "name": "validators",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6180,
                          "src": "5475:10:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_$dyn_storage",
                            "typeString": "address[] storage ref"
                          }
                        },
                        "id": 6682,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "length",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "5475:17:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 6678,
                            "name": "_value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6641,
                            "src": "5463:6:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 6675,
                              "name": "totalDelegated",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6819,
                              "src": "5442:14:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                                "typeString": "function () view returns (uint256)"
                              }
                            },
                            "id": 6676,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "5442:16:10",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 6677,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "add",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 7973,
                          "src": "5442:20:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                            "typeString": "function (uint256,uint256) pure returns (uint256)"
                          }
                        },
                        "id": 6679,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5442:28:10",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 6680,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "div",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 8070,
                      "src": "5442:32:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 6683,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5442:51:10",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5416:77:10"
                },
                {
                  "assignments": [
                    6686
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 6686,
                      "mutability": "mutable",
                      "name": "left",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 6759,
                      "src": "5497:12:10",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 6685,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "5497:7:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 6688,
                  "initialValue": {
                    "argumentTypes": null,
                    "id": 6687,
                    "name": "_value",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 6641,
                    "src": "5512:6:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5497:21:10"
                },
                {
                  "body": {
                    "id": 6755,
                    "nodeType": "Block",
                    "src": "5582:315:10",
                    "statements": [
                      {
                        "assignments": [
                          6705
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 6705,
                            "mutability": "mutable",
                            "name": "cur",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 6755,
                            "src": "5587:11:10",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 6704,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "5587:7:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 6716,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 6710,
                                  "name": "this",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -28,
                                  "src": "5639:4:10",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_FuseStakingV3_$7377",
                                    "typeString": "contract FuseStakingV3"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_FuseStakingV3_$7377",
                                    "typeString": "contract FuseStakingV3"
                                  }
                                ],
                                "id": 6709,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "5631:7:10",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 6708,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "5631:7:10",
                                  "typeDescriptions": {
                                    "typeIdentifier": null,
                                    "typeString": null
                                  }
                                }
                              },
                              "id": 6711,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "5631:13:10",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 6712,
                                "name": "validators",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6180,
                                "src": "5646:10:10",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_address_$dyn_storage",
                                  "typeString": "address[] storage ref"
                                }
                              },
                              "id": 6714,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 6713,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6690,
                                "src": "5657:1:10",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "5646:13:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 6706,
                              "name": "consensus",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6182,
                              "src": "5605:9:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IConsensus_$6164",
                                "typeString": "contract IConsensus"
                              }
                            },
                            "id": 6707,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "delegatedAmount",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 6156,
                            "src": "5605:25:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$",
                              "typeString": "function (address,address) view external returns (uint256)"
                            }
                          },
                          "id": 6715,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5605:55:10",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "5587:73:10"
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 6719,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 6717,
                            "name": "cur",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6705,
                            "src": "5670:3:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 6718,
                            "name": "perValidator",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6674,
                            "src": "5676:12:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "5670:18:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 6754,
                        "nodeType": "IfStatement",
                        "src": "5666:227:10",
                        "trueBody": {
                          "id": 6753,
                          "nodeType": "Block",
                          "src": "5690:203:10",
                          "statements": [
                            {
                              "assignments": [
                                6721
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 6721,
                                  "mutability": "mutable",
                                  "name": "toDelegate",
                                  "nodeType": "VariableDeclaration",
                                  "overrides": null,
                                  "scope": 6753,
                                  "src": "5696:18:10",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "typeName": {
                                    "id": 6720,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "5696:7:10",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                }
                              ],
                              "id": 6726,
                              "initialValue": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 6724,
                                    "name": "cur",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6705,
                                    "src": "5734:3:10",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 6722,
                                    "name": "perValidator",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6674,
                                    "src": "5717:12:10",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 6723,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "sub",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 7990,
                                  "src": "5717:16:10",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                    "typeString": "function (uint256,uint256) pure returns (uint256)"
                                  }
                                },
                                "id": 6725,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "5717:21:10",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "5696:42:10"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 6734,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 6727,
                                  "name": "toDelegate",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6721,
                                  "src": "5744:10:10",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "condition": {
                                    "argumentTypes": null,
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 6730,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "argumentTypes": null,
                                      "id": 6728,
                                      "name": "toDelegate",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6721,
                                      "src": "5757:10:10",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "<",
                                    "rightExpression": {
                                      "argumentTypes": null,
                                      "id": 6729,
                                      "name": "left",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6686,
                                      "src": "5770:4:10",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "5757:17:10",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  "falseExpression": {
                                    "argumentTypes": null,
                                    "id": 6732,
                                    "name": "left",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6686,
                                    "src": "5790:4:10",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 6733,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "Conditional",
                                  "src": "5757:37:10",
                                  "trueExpression": {
                                    "argumentTypes": null,
                                    "id": 6731,
                                    "name": "toDelegate",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6721,
                                    "src": "5777:10:10",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "5744:50:10",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 6735,
                              "nodeType": "ExpressionStatement",
                              "src": "5744:50:10"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "baseExpression": {
                                      "argumentTypes": null,
                                      "id": 6741,
                                      "name": "validators",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6180,
                                      "src": "5840:10:10",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_address_$dyn_storage",
                                        "typeString": "address[] storage ref"
                                      }
                                    },
                                    "id": 6743,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "id": 6742,
                                      "name": "i",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6690,
                                      "src": "5851:1:10",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "5840:13:10",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 6736,
                                      "name": "consensus",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6182,
                                      "src": "5800:9:10",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_IConsensus_$6164",
                                        "typeString": "contract IConsensus"
                                      }
                                    },
                                    "id": 6738,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "delegate",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 6139,
                                    "src": "5800:18:10",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_external_payable$_t_address_$returns$__$",
                                      "typeString": "function (address) payable external"
                                    }
                                  },
                                  "id": 6740,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "names": [
                                    "value"
                                  ],
                                  "nodeType": "FunctionCallOptions",
                                  "options": [
                                    {
                                      "argumentTypes": null,
                                      "id": 6739,
                                      "name": "toDelegate",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6721,
                                      "src": "5827:10:10",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "src": "5800:39:10",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_payable$_t_address_$returns$__$value",
                                    "typeString": "function (address) payable external"
                                  }
                                },
                                "id": 6744,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "5800:54:10",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 6745,
                              "nodeType": "ExpressionStatement",
                              "src": "5800:54:10"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 6751,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 6746,
                                  "name": "left",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6686,
                                  "src": "5860:4:10",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 6749,
                                      "name": "toDelegate",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6721,
                                      "src": "5876:10:10",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 6747,
                                      "name": "left",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6686,
                                      "src": "5867:4:10",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 6748,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "sub",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 7990,
                                    "src": "5867:8:10",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                      "typeString": "function (uint256,uint256) pure returns (uint256)"
                                    }
                                  },
                                  "id": 6750,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "5867:20:10",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "5860:27:10",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 6752,
                              "nodeType": "ExpressionStatement",
                              "src": "5860:27:10"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 6700,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 6696,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 6693,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6690,
                        "src": "5542:1:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "<",
                      "rightExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 6694,
                          "name": "validators",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6180,
                          "src": "5546:10:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_$dyn_storage",
                            "typeString": "address[] storage ref"
                          }
                        },
                        "id": 6695,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "length",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "5546:17:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "5542:21:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 6699,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 6697,
                        "name": "left",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6686,
                        "src": "5567:4:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": ">",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 6698,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "5574:1:10",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "5567:8:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "5542:33:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 6756,
                  "initializationExpression": {
                    "assignments": [
                      6690
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 6690,
                        "mutability": "mutable",
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 6756,
                        "src": "5527:9:10",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 6689,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5527:7:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 6692,
                    "initialValue": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 6691,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "5539:1:10",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "5527:13:10"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 6702,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "5577:3:10",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 6701,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6690,
                        "src": "5577:1:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 6703,
                    "nodeType": "ExpressionStatement",
                    "src": "5577:3:10"
                  },
                  "nodeType": "ForStatement",
                  "src": "5522:375:10"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 6757,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "5908:4:10",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 6647,
                  "id": 6758,
                  "nodeType": "Return",
                  "src": "5901:11:10"
                }
              ]
            },
            "documentation": null,
            "id": 6760,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "stakeNextValidator",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 6644,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6641,
                  "mutability": "mutable",
                  "name": "_value",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6760,
                  "src": "5196:14:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 6640,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5196:7:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6643,
                  "mutability": "mutable",
                  "name": "_validator",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6760,
                  "src": "5212:18:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6642,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5212:7:10",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5195:36:10"
            },
            "returnParameters": {
              "id": 6647,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6646,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6760,
                  "src": "5254:4:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 6645,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "5254:4:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5253:6:10"
            },
            "scope": 7377,
            "src": "5168:748:10",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 6773,
              "nodeType": "Block",
              "src": "5970:27:10",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 6770,
                        "name": "_v",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6762,
                        "src": "5990:2:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 6767,
                        "name": "validators",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6180,
                        "src": "5974:10:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_storage",
                          "typeString": "address[] storage ref"
                        }
                      },
                      "id": 6769,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "push",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "5974:15:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_arraypush_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 6771,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5974:19:10",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6772,
                  "nodeType": "ExpressionStatement",
                  "src": "5974:19:10"
                }
              ]
            },
            "documentation": null,
            "functionSelector": "4d238c8e",
            "id": 6774,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 6765,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 6764,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 7818,
                  "src": "5960:9:10",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "5960:9:10"
              }
            ],
            "name": "addValidator",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 6763,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6762,
                  "mutability": "mutable",
                  "name": "_v",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6774,
                  "src": "5941:10:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6761,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5941:7:10",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5940:12:10"
            },
            "returnParameters": {
              "id": 6766,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5970:0:10"
            },
            "scope": 7377,
            "src": "5919:78:10",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 6818,
              "nodeType": "Block",
              "src": "6056:202:10",
              "statements": [
                {
                  "assignments": [
                    6780
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 6780,
                      "mutability": "mutable",
                      "name": "total",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 6818,
                      "src": "6060:13:10",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 6779,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "6060:7:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 6782,
                  "initialValue": {
                    "argumentTypes": null,
                    "hexValue": "30",
                    "id": 6781,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "6076:1:10",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_0_by_1",
                      "typeString": "int_const 0"
                    },
                    "value": "0"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6060:17:10"
                },
                {
                  "body": {
                    "id": 6814,
                    "nodeType": "Block",
                    "src": "6129:110:10",
                    "statements": [
                      {
                        "assignments": [
                          6795
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 6795,
                            "mutability": "mutable",
                            "name": "cur",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 6814,
                            "src": "6134:11:10",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 6794,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "6134:7:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 6806,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 6800,
                                  "name": "this",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -28,
                                  "src": "6186:4:10",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_FuseStakingV3_$7377",
                                    "typeString": "contract FuseStakingV3"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_FuseStakingV3_$7377",
                                    "typeString": "contract FuseStakingV3"
                                  }
                                ],
                                "id": 6799,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "6178:7:10",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 6798,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "6178:7:10",
                                  "typeDescriptions": {
                                    "typeIdentifier": null,
                                    "typeString": null
                                  }
                                }
                              },
                              "id": 6801,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "6178:13:10",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 6802,
                                "name": "validators",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6180,
                                "src": "6193:10:10",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_address_$dyn_storage",
                                  "typeString": "address[] storage ref"
                                }
                              },
                              "id": 6804,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 6803,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6784,
                                "src": "6204:1:10",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "6193:13:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 6796,
                              "name": "consensus",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6182,
                              "src": "6152:9:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IConsensus_$6164",
                                "typeString": "contract IConsensus"
                              }
                            },
                            "id": 6797,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "delegatedAmount",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 6156,
                            "src": "6152:25:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$",
                              "typeString": "function (address,address) view external returns (uint256)"
                            }
                          },
                          "id": 6805,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6152:55:10",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "6134:73:10"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 6812,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 6807,
                            "name": "total",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6780,
                            "src": "6212:5:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 6810,
                                "name": "cur",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6795,
                                "src": "6230:3:10",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 6808,
                                "name": "total",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6780,
                                "src": "6220:5:10",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 6809,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "add",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 7973,
                              "src": "6220:9:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 6811,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "6220:14:10",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "6212:22:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 6813,
                        "nodeType": "ExpressionStatement",
                        "src": "6212:22:10"
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 6790,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 6787,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6784,
                      "src": "6101:1:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 6788,
                        "name": "validators",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6180,
                        "src": "6105:10:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_storage",
                          "typeString": "address[] storage ref"
                        }
                      },
                      "id": 6789,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "6105:17:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "6101:21:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 6815,
                  "initializationExpression": {
                    "assignments": [
                      6784
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 6784,
                        "mutability": "mutable",
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 6815,
                        "src": "6086:9:10",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 6783,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "6086:7:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 6786,
                    "initialValue": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 6785,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "6098:1:10",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "6086:13:10"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 6792,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "6124:3:10",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 6791,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6784,
                        "src": "6124:1:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 6793,
                    "nodeType": "ExpressionStatement",
                    "src": "6124:3:10"
                  },
                  "nodeType": "ForStatement",
                  "src": "6081:158:10"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 6816,
                    "name": "total",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 6780,
                    "src": "6249:5:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 6778,
                  "id": 6817,
                  "nodeType": "Return",
                  "src": "6242:12:10"
                }
              ]
            },
            "documentation": null,
            "functionSelector": "80d04de8",
            "id": 6819,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "totalDelegated",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 6775,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6023:2:10"
            },
            "returnParameters": {
              "id": 6778,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6777,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6819,
                  "src": "6047:7:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 6776,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6047:7:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6046:9:10"
            },
            "scope": 7377,
            "src": "6000:258:10",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 6903,
              "nodeType": "Block",
              "src": "6323:592:10",
              "statements": [
                {
                  "assignments": [
                    6827
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 6827,
                      "mutability": "mutable",
                      "name": "delegated",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 6903,
                      "src": "6327:17:10",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 6826,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "6327:7:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 6836,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 6832,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -28,
                            "src": "6384:4:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_FuseStakingV3_$7377",
                              "typeString": "contract FuseStakingV3"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_FuseStakingV3_$7377",
                              "typeString": "contract FuseStakingV3"
                            }
                          ],
                          "id": 6831,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "6376:7:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 6830,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "6376:7:10",
                            "typeDescriptions": {
                              "typeIdentifier": null,
                              "typeString": null
                            }
                          }
                        },
                        "id": 6833,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "6376:13:10",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6834,
                        "name": "_validator",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6821,
                        "src": "6391:10:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 6828,
                        "name": "consensus",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6182,
                        "src": "6350:9:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IConsensus_$6164",
                          "typeString": "contract IConsensus"
                        }
                      },
                      "id": 6829,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "delegatedAmount",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6156,
                      "src": "6350:25:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$",
                        "typeString": "function (address,address) view external returns (uint256)"
                      }
                    },
                    "id": 6835,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6350:52:10",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6327:75:10"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 6839,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 6837,
                      "name": "delegated",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6827,
                      "src": "6410:9:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 6838,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "6422:1:10",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "6410:13:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 6858,
                  "nodeType": "IfStatement",
                  "src": "6406:282:10",
                  "trueBody": {
                    "id": 6857,
                    "nodeType": "Block",
                    "src": "6425:263:10",
                    "statements": [
                      {
                        "assignments": [
                          6841
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 6841,
                            "mutability": "mutable",
                            "name": "prevBalance",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 6857,
                            "src": "6430:19:10",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 6840,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "6430:7:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 6844,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 6842,
                            "name": "balance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7372,
                            "src": "6452:7:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                              "typeString": "function () view returns (uint256)"
                            }
                          },
                          "id": 6843,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6452:9:10",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "6430:31:10"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 6846,
                              "name": "_validator",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6821,
                              "src": "6486:10:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 6847,
                              "name": "delegated",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6827,
                              "src": "6498:9:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 6845,
                            "name": "undelegateWithCatch",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7357,
                            "src": "6466:19:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                              "typeString": "function (address,uint256) returns (bool)"
                            }
                          },
                          "id": 6848,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6466:42:10",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 6849,
                        "nodeType": "ExpressionStatement",
                        "src": "6466:42:10"
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 6853,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 6850,
                              "name": "balance",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7372,
                              "src": "6597:7:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                                "typeString": "function () view returns (uint256)"
                              }
                            },
                            "id": 6851,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "6597:9:10",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 6852,
                            "name": "prevBalance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6841,
                            "src": "6610:11:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "6597:24:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 6856,
                        "nodeType": "IfStatement",
                        "src": "6593:91:10",
                        "trueBody": {
                          "id": 6855,
                          "nodeType": "Block",
                          "src": "6623:61:10",
                          "statements": [
                            {
                              "expression": null,
                              "functionReturnParameters": 6825,
                              "id": 6854,
                              "nodeType": "Return",
                              "src": "6672:7:10"
                            }
                          ]
                        }
                      }
                    ]
                  }
                },
                {
                  "body": {
                    "id": 6901,
                    "nodeType": "Block",
                    "src": "6740:172:10",
                    "statements": [
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 6874,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 6870,
                              "name": "validators",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6180,
                              "src": "6749:10:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_address_$dyn_storage",
                                "typeString": "address[] storage ref"
                              }
                            },
                            "id": 6872,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 6871,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6860,
                              "src": "6760:1:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "6749:13:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 6873,
                            "name": "_validator",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6821,
                            "src": "6766:10:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "6749:27:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 6900,
                        "nodeType": "IfStatement",
                        "src": "6745:163:10",
                        "trueBody": {
                          "id": 6899,
                          "nodeType": "Block",
                          "src": "6778:130:10",
                          "statements": [
                            {
                              "condition": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 6880,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "id": 6875,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6860,
                                  "src": "6788:1:10",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "<",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 6879,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 6876,
                                      "name": "validators",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6180,
                                      "src": "6792:10:10",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_address_$dyn_storage",
                                        "typeString": "address[] storage ref"
                                      }
                                    },
                                    "id": 6877,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "length",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": null,
                                    "src": "6792:17:10",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "-",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "hexValue": "31",
                                    "id": 6878,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "6812:1:10",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_1_by_1",
                                      "typeString": "int_const 1"
                                    },
                                    "value": "1"
                                  },
                                  "src": "6792:21:10",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "6788:25:10",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "falseBody": null,
                              "id": 6892,
                              "nodeType": "IfStatement",
                              "src": "6784:85:10",
                              "trueBody": {
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 6890,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftHandSide": {
                                    "argumentTypes": null,
                                    "baseExpression": {
                                      "argumentTypes": null,
                                      "id": 6881,
                                      "name": "validators",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6180,
                                      "src": "6820:10:10",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_address_$dyn_storage",
                                        "typeString": "address[] storage ref"
                                      }
                                    },
                                    "id": 6883,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "id": 6882,
                                      "name": "i",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6860,
                                      "src": "6831:1:10",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": true,
                                    "nodeType": "IndexAccess",
                                    "src": "6820:13:10",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "nodeType": "Assignment",
                                  "operator": "=",
                                  "rightHandSide": {
                                    "argumentTypes": null,
                                    "baseExpression": {
                                      "argumentTypes": null,
                                      "id": 6884,
                                      "name": "validators",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6180,
                                      "src": "6836:10:10",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_address_$dyn_storage",
                                        "typeString": "address[] storage ref"
                                      }
                                    },
                                    "id": 6889,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 6888,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "argumentTypes": null,
                                        "expression": {
                                          "argumentTypes": null,
                                          "id": 6885,
                                          "name": "validators",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 6180,
                                          "src": "6847:10:10",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_array$_t_address_$dyn_storage",
                                            "typeString": "address[] storage ref"
                                          }
                                        },
                                        "id": 6886,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "length",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": null,
                                        "src": "6847:17:10",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "-",
                                      "rightExpression": {
                                        "argumentTypes": null,
                                        "hexValue": "31",
                                        "id": 6887,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "6867:1:10",
                                        "subdenomination": null,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_1_by_1",
                                          "typeString": "int_const 1"
                                        },
                                        "value": "1"
                                      },
                                      "src": "6847:21:10",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "6836:33:10",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "src": "6820:49:10",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "id": 6891,
                                "nodeType": "ExpressionStatement",
                                "src": "6820:49:10"
                              }
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 6893,
                                    "name": "validators",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6180,
                                    "src": "6875:10:10",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_address_$dyn_storage",
                                      "typeString": "address[] storage ref"
                                    }
                                  },
                                  "id": 6895,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "pop",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "6875:14:10",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_arraypop_nonpayable$__$returns$__$",
                                    "typeString": "function ()"
                                  }
                                },
                                "id": 6896,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "6875:16:10",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 6897,
                              "nodeType": "ExpressionStatement",
                              "src": "6875:16:10"
                            },
                            {
                              "id": 6898,
                              "nodeType": "Break",
                              "src": "6897:5:10"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 6866,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 6863,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6860,
                      "src": "6712:1:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 6864,
                        "name": "validators",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6180,
                        "src": "6716:10:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_storage",
                          "typeString": "address[] storage ref"
                        }
                      },
                      "id": 6865,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "6716:17:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "6712:21:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 6902,
                  "initializationExpression": {
                    "assignments": [
                      6860
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 6860,
                        "mutability": "mutable",
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 6902,
                        "src": "6697:9:10",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 6859,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "6697:7:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 6862,
                    "initialValue": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 6861,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "6709:1:10",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "6697:13:10"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 6868,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "6735:3:10",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 6867,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6860,
                        "src": "6735:1:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 6869,
                    "nodeType": "ExpressionStatement",
                    "src": "6735:3:10"
                  },
                  "nodeType": "ForStatement",
                  "src": "6692:220:10"
                }
              ]
            },
            "documentation": null,
            "functionSelector": "40a141ff",
            "id": 6904,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 6824,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 6823,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 7818,
                  "src": "6313:9:10",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "6313:9:10"
              }
            ],
            "name": "removeValidator",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 6822,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6821,
                  "mutability": "mutable",
                  "name": "_validator",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6904,
                  "src": "6286:18:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6820,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6286:7:10",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6285:20:10"
            },
            "returnParameters": {
              "id": 6825,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6323:0:10"
            },
            "scope": 7377,
            "src": "6261:654:10",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 7067,
              "nodeType": "Block",
              "src": "6955:1473:10",
              "statements": [
                {
                  "assignments": [
                    6908
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 6908,
                      "mutability": "mutable",
                      "name": "curDay",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 7067,
                      "src": "6959:14:10",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 6907,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "6959:7:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 6912,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 6909,
                        "name": "ubischeme",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6188,
                        "src": "6976:9:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_UBIScheme_$519",
                          "typeString": "contract UBIScheme"
                        }
                      },
                      "id": 6910,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "currentDay",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 518,
                      "src": "6976:20:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$",
                        "typeString": "function () view external returns (uint256)"
                      }
                    },
                    "id": 6911,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6976:22:10",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6959:39:10"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 6916,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 6914,
                          "name": "curDay",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6908,
                          "src": "7014:6:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 6915,
                          "name": "lastDayCollected",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6194,
                          "src": "7024:16:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "7014:26:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "63616e20636f6c6c656374206f6e6c79206f6e636520696e206120756269206379636c65",
                        "id": 6917,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7045:38:10",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_7ab52d82b4ff54b2d28f381727da09016a1caee52ad4c7df9be7476f654c4690",
                          "typeString": "literal_string \"can collect only once in a ubi cycle\""
                        },
                        "value": "can collect only once in a ubi cycle"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_7ab52d82b4ff54b2d28f381727da09016a1caee52ad4c7df9be7476f654c4690",
                          "typeString": "literal_string \"can collect only once in a ubi cycle\""
                        }
                      ],
                      "id": 6913,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "7002:7:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 6918,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7002:85:10",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6919,
                  "nodeType": "ExpressionStatement",
                  "src": "7002:85:10"
                },
                {
                  "assignments": [
                    6921
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 6921,
                      "mutability": "mutable",
                      "name": "earnings",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 7067,
                      "src": "7092:16:10",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 6920,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "7092:7:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 6926,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 6925,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 6922,
                        "name": "balance",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7372,
                        "src": "7111:7:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                          "typeString": "function () view returns (uint256)"
                        }
                      },
                      "id": 6923,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "7111:9:10",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "-",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 6924,
                      "name": "pendingFuseEarnings",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6208,
                      "src": "7123:19:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "7111:31:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7092:50:10"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 6932,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 6930,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 6928,
                            "name": "pendingFuseEarnings",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6208,
                            "src": "7154:19:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "+",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 6929,
                            "name": "earnings",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6921,
                            "src": "7176:8:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "7154:30:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 6931,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "7187:1:10",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "7154:34:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "6e6f206561726e696e677320746f20636f6c6c656374",
                        "id": 6933,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7190:24:10",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_3d429c371bdc4527c0b1b9d10dc18982611a1721ce1c3e2679769b87a51b9bcc",
                          "typeString": "literal_string \"no earnings to collect\""
                        },
                        "value": "no earnings to collect"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_3d429c371bdc4527c0b1b9d10dc18982611a1721ce1c3e2679769b87a51b9bcc",
                          "typeString": "literal_string \"no earnings to collect\""
                        }
                      ],
                      "id": 6927,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "7146:7:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 6934,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7146:69:10",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6935,
                  "nodeType": "ExpressionStatement",
                  "src": "7146:69:10"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 6938,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 6936,
                      "name": "lastDayCollected",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6194,
                      "src": "7220:16:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 6937,
                      "name": "curDay",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6908,
                      "src": "7239:6:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "7220:25:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 6939,
                  "nodeType": "ExpressionStatement",
                  "src": "7220:25:10"
                },
                {
                  "assignments": [
                    6941
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 6941,
                      "mutability": "mutable",
                      "name": "fuseUBI",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 7067,
                      "src": "7249:15:10",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 6940,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "7249:7:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 6951,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 6949,
                        "name": "RATIO_BASE",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6202,
                        "src": "7316:10:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 6946,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "id": 6944,
                              "name": "RATIO_BASE",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6202,
                              "src": "7283:10:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "-",
                            "rightExpression": {
                              "argumentTypes": null,
                              "id": 6945,
                              "name": "stakeBackRatio",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6196,
                              "src": "7296:14:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "7283:27:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 6942,
                            "name": "earnings",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6921,
                            "src": "7270:8:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 6943,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "mul",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 8053,
                          "src": "7270:12:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                            "typeString": "function (uint256,uint256) pure returns (uint256)"
                          }
                        },
                        "id": 6947,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "7270:41:10",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 6948,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "div",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 8070,
                      "src": "7270:45:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 6950,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7270:57:10",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7249:78:10"
                },
                {
                  "assignments": [
                    6953
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 6953,
                      "mutability": "mutable",
                      "name": "stakeBack",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 7067,
                      "src": "7331:17:10",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 6952,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "7331:7:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 6957,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 6956,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 6954,
                      "name": "earnings",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6921,
                      "src": "7351:8:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "-",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 6955,
                      "name": "fuseUBI",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6941,
                      "src": "7362:7:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "7351:18:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7331:38:10"
                },
                {
                  "assignments": [
                    6962
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 6962,
                      "mutability": "mutable",
                      "name": "fuseswapResult",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 7067,
                      "src": "7374:31:10",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                        "typeString": "uint256[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 6960,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "7374:7:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 6961,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "7374:9:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                          "typeString": "uint256[]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 6969,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 6966,
                            "name": "pendingFuseEarnings",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6208,
                            "src": "7430:19:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 6964,
                            "name": "fuseUBI",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6941,
                            "src": "7418:7:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 6965,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "add",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 7973,
                          "src": "7418:11:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                            "typeString": "function (uint256,uint256) pure returns (uint256)"
                          }
                        },
                        "id": 6967,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "7418:32:10",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 6963,
                      "name": "_buyGD",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7132,
                      "src": "7411:6:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$",
                        "typeString": "function (uint256) returns (uint256[] memory)"
                      }
                    },
                    "id": 6968,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7411:40:10",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                      "typeString": "uint256[] memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7374:77:10"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 6980,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 6970,
                      "name": "pendingFuseEarnings",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6208,
                      "src": "7484:19:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 6976,
                            "name": "fuseswapResult",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6962,
                            "src": "7547:14:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                              "typeString": "uint256[] memory"
                            }
                          },
                          "id": 6978,
                          "indexExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 6977,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "7562:1:10",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "7547:17:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 6973,
                              "name": "pendingFuseEarnings",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6208,
                              "src": "7518:19:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 6971,
                              "name": "fuseUBI",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6941,
                              "src": "7506:7:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 6972,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "add",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 7973,
                            "src": "7506:11:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                              "typeString": "function (uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 6974,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7506:32:10",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 6975,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sub",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7990,
                        "src": "7506:36:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                          "typeString": "function (uint256,uint256) pure returns (uint256)"
                        }
                      },
                      "id": 6979,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "7506:62:10",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "7484:84:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 6981,
                  "nodeType": "ExpressionStatement",
                  "src": "7484:84:10"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 6983,
                        "name": "stakeBack",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6953,
                        "src": "7591:9:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 6986,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "7610:1:10",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            }
                          ],
                          "id": 6985,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "7602:7:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 6984,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "7602:7:10",
                            "typeDescriptions": {
                              "typeIdentifier": null,
                              "typeString": null
                            }
                          }
                        },
                        "id": 6987,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "7602:10:10",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "id": 6982,
                      "name": "stakeNextValidator",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6760,
                      "src": "7572:18:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_address_$returns$_t_bool_$",
                        "typeString": "function (uint256,address) returns (bool)"
                      }
                    },
                    "id": 6988,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7572:41:10",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 6989,
                  "nodeType": "ExpressionStatement",
                  "src": "7572:41:10"
                },
                {
                  "assignments": [
                    6991
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 6991,
                      "mutability": "mutable",
                      "name": "gdBought",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 7067,
                      "src": "7656:16:10",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 6990,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "7656:7:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 6995,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 6992,
                      "name": "fuseswapResult",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6962,
                      "src": "7675:14:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                        "typeString": "uint256[] memory"
                      }
                    },
                    "id": 6994,
                    "indexExpression": {
                      "argumentTypes": null,
                      "hexValue": "31",
                      "id": 6993,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "7690:1:10",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "7675:17:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7656:36:10"
                },
                {
                  "assignments": [
                    6997
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 6997,
                      "mutability": "mutable",
                      "name": "keeperFee",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 7067,
                      "src": "7696:17:10",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 6996,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "7696:7:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7005,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7003,
                        "name": "RATIO_BASE",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6202,
                        "src": "7749:10:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 7000,
                            "name": "keeperFeeRatio",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6200,
                            "src": "7729:14:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 6998,
                            "name": "gdBought",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6991,
                            "src": "7716:8:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 6999,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "mul",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 8053,
                          "src": "7716:12:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                            "typeString": "function (uint256,uint256) pure returns (uint256)"
                          }
                        },
                        "id": 7001,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "7716:28:10",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 7002,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "div",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 8070,
                      "src": "7716:32:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 7004,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7716:44:10",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7696:64:10"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 7008,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 7006,
                      "name": "keeperFee",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6997,
                      "src": "7768:9:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 7007,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "7780:1:10",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "7768:13:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 7017,
                  "nodeType": "IfStatement",
                  "src": "7764:53:10",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 7012,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "7795:3:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 7013,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "7795:10:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 7014,
                          "name": "keeperFee",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6997,
                          "src": "7807:9:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 7009,
                          "name": "GD",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6186,
                          "src": "7783:2:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_GoodDollar_$330",
                            "typeString": "contract GoodDollar"
                          }
                        },
                        "id": 7011,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "transfer",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 299,
                        "src": "7783:11:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                          "typeString": "function (address,uint256) external returns (bool)"
                        }
                      },
                      "id": 7015,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "7783:34:10",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "id": 7016,
                    "nodeType": "ExpressionStatement",
                    "src": "7783:34:10"
                  }
                },
                {
                  "assignments": [
                    7019
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7019,
                      "mutability": "mutable",
                      "name": "communityPoolContribution",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 7067,
                      "src": "7822:33:10",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7018,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "7822:7:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7030,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7028,
                        "name": "RATIO_BASE",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6202,
                        "src": "7966:10:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 7025,
                            "name": "communityPoolRatio",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6204,
                            "src": "7914:18:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 7022,
                                "name": "keeperFee",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6997,
                                "src": "7879:9:10",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 7020,
                                "name": "gdBought",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6991,
                                "src": "7861:8:10",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 7021,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sub",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 7990,
                              "src": "7861:17:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 7023,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "7861:28:10",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 7024,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "mul",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 8053,
                          "src": "7861:52:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                            "typeString": "function (uint256,uint256) pure returns (uint256)"
                          }
                        },
                        "id": 7026,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "7861:72:10",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 7027,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "div",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 8070,
                      "src": "7861:104:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 7029,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7861:116:10",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7822:155:10"
                },
                {
                  "assignments": [
                    7032
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7032,
                      "mutability": "mutable",
                      "name": "ubiAfterFeeAndPool",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 7067,
                      "src": "8022:26:10",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7031,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "8022:7:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7037,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7035,
                        "name": "communityPoolContribution",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7019,
                        "src": "8064:25:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 7033,
                        "name": "gdBought",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6991,
                        "src": "8051:8:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 7034,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sub",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7990,
                      "src": "8051:12:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 7036,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8051:39:10",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "8022:68:10"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 7043,
                            "name": "ubischeme",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6188,
                            "src": "8115:9:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_UBIScheme_$519",
                              "typeString": "contract UBIScheme"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_UBIScheme_$519",
                              "typeString": "contract UBIScheme"
                            }
                          ],
                          "id": 7042,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "8107:7:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 7041,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "8107:7:10",
                            "typeDescriptions": {
                              "typeIdentifier": null,
                              "typeString": null
                            }
                          }
                        },
                        "id": 7044,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "8107:18:10",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7045,
                        "name": "ubiAfterFeeAndPool",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7032,
                        "src": "8127:18:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 7038,
                        "name": "GD",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6186,
                        "src": "8095:2:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_GoodDollar_$330",
                          "typeString": "contract GoodDollar"
                        }
                      },
                      "id": 7040,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "transfer",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 299,
                      "src": "8095:11:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                        "typeString": "function (address,uint256) external returns (bool)"
                      }
                    },
                    "id": 7046,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8095:51:10",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 7047,
                  "nodeType": "ExpressionStatement",
                  "src": "8095:51:10"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7053,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 7048,
                      "name": "communityPoolBalance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6206,
                      "src": "8174:20:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 7051,
                          "name": "communityPoolContribution",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7019,
                          "src": "8226:25:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 7049,
                          "name": "communityPoolBalance",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6206,
                          "src": "8197:20:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 7050,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "add",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7973,
                        "src": "8197:24:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                          "typeString": "function (uint256,uint256) pure returns (uint256)"
                        }
                      },
                      "id": 7052,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "8197:58:10",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "8174:81:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 7054,
                  "nodeType": "ExpressionStatement",
                  "src": "8174:81:10"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7056,
                        "name": "curDay",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6908,
                        "src": "8282:6:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7057,
                        "name": "ubiAfterFeeAndPool",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7032,
                        "src": "8293:18:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7058,
                        "name": "communityPoolContribution",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7019,
                        "src": "8316:25:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7059,
                        "name": "gdBought",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6991,
                        "src": "8346:8:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7060,
                        "name": "earnings",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6921,
                        "src": "8359:8:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7061,
                        "name": "pendingFuseEarnings",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6208,
                        "src": "8372:19:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 7062,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "8396:3:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 7063,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "8396:10:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7064,
                        "name": "keeperFee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6997,
                        "src": "8411:9:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 7055,
                      "name": "UBICollected",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6226,
                      "src": "8265:12:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (uint256,uint256,uint256,uint256,uint256,uint256,address,uint256)"
                      }
                    },
                    "id": 7065,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8265:159:10",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7066,
                  "nodeType": "EmitStatement",
                  "src": "8260:164:10"
                }
              ]
            },
            "documentation": null,
            "functionSelector": "a5a90636",
            "id": 7068,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "collectUBIInterest",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 6905,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6945:2:10"
            },
            "returnParameters": {
              "id": 6906,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6955:0:10"
            },
            "scope": 7377,
            "src": "6918:1510:10",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 7131,
              "nodeType": "Block",
              "src": "8641:336:10",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 7080,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 7078,
                          "name": "_value",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7071,
                          "src": "8674:6:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 7079,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "8683:1:10",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "8674:10:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "6275792076616c75652073686f756c64206265203e2030",
                        "id": 7081,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "8686:25:10",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_2161b5d7967b0c445d74e818c0e21d5fb08d78a2651dd5815a6dee3023326181",
                          "typeString": "literal_string \"buy value should be > 0\""
                        },
                        "value": "buy value should be > 0"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_2161b5d7967b0c445d74e818c0e21d5fb08d78a2651dd5815a6dee3023326181",
                          "typeString": "literal_string \"buy value should be > 0\""
                        }
                      ],
                      "id": 7077,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "8666:7:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 7082,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8666:46:10",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7083,
                  "nodeType": "ExpressionStatement",
                  "src": "8666:46:10"
                },
                {
                  "assignments": [
                    7085
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7085,
                      "mutability": "mutable",
                      "name": "maxFuse",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 7131,
                      "src": "8716:15:10",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7084,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "8716:7:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7089,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7087,
                        "name": "_value",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7071,
                        "src": "8758:6:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 7086,
                      "name": "calcMaxFuseWithSlippage",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        7154,
                        7323
                      ],
                      "referencedDeclaration": 7154,
                      "src": "8734:23:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256) view returns (uint256)"
                      }
                    },
                    "id": 7088,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8734:31:10",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "8716:49:10"
                },
                {
                  "assignments": [
                    7094
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7094,
                      "mutability": "mutable",
                      "name": "path",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 7131,
                      "src": "8769:21:10",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                        "typeString": "address[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 7092,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "8769:7:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 7093,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "8769:9:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                          "typeString": "address[]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7100,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "32",
                        "id": 7098,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "8807:1:10",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_2_by_1",
                          "typeString": "int_const 2"
                        },
                        "value": "2"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_rational_2_by_1",
                          "typeString": "int_const 2"
                        }
                      ],
                      "id": 7097,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "NewExpression",
                      "src": "8793:13:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_address_$dyn_memory_ptr_$",
                        "typeString": "function (uint256) pure returns (address[] memory)"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 7095,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "8797:7:10",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 7096,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "8797:9:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                          "typeString": "address[]"
                        }
                      }
                    },
                    "id": 7099,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8793:16:10",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                      "typeString": "address[] memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "8769:40:10"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7108,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 7101,
                        "name": "path",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7094,
                        "src": "8813:4:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[] memory"
                        }
                      },
                      "id": 7103,
                      "indexExpression": {
                        "argumentTypes": null,
                        "hexValue": "31",
                        "id": 7102,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "8818:1:10",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        "value": "1"
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "8813:7:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 7106,
                          "name": "GD",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6186,
                          "src": "8831:2:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_GoodDollar_$330",
                            "typeString": "contract GoodDollar"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_GoodDollar_$330",
                            "typeString": "contract GoodDollar"
                          }
                        ],
                        "id": 7105,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "8823:7:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": {
                          "id": 7104,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "8823:7:10",
                          "typeDescriptions": {
                            "typeIdentifier": null,
                            "typeString": null
                          }
                        }
                      },
                      "id": 7107,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "8823:11:10",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "8813:21:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 7109,
                  "nodeType": "ExpressionStatement",
                  "src": "8813:21:10"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7116,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 7110,
                        "name": "path",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7094,
                        "src": "8838:4:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[] memory"
                        }
                      },
                      "id": 7112,
                      "indexExpression": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 7111,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "8843:1:10",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "8838:7:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "expression": {
                          "argumentTypes": null,
                          "id": 7113,
                          "name": "uniswap",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6184,
                          "src": "8848:7:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_Uniswap_$444",
                            "typeString": "contract Uniswap"
                          }
                        },
                        "id": 7114,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "WETH",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 405,
                        "src": "8848:12:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_pure$__$returns$_t_address_$",
                          "typeString": "function () pure external returns (address)"
                        }
                      },
                      "id": 7115,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "8848:14:10",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "8838:24:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 7117,
                  "nodeType": "ExpressionStatement",
                  "src": "8838:24:10"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 7122,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "8929:1:10",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      {
                        "argumentTypes": null,
                        "id": 7123,
                        "name": "path",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7094,
                        "src": "8936:4:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[] memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 7126,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -28,
                            "src": "8954:4:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_FuseStakingV3_$7377",
                              "typeString": "contract FuseStakingV3"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_FuseStakingV3_$7377",
                              "typeString": "contract FuseStakingV3"
                            }
                          ],
                          "id": 7125,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "8946:7:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 7124,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "8946:7:10",
                            "typeDescriptions": {
                              "typeIdentifier": null,
                              "typeString": null
                            }
                          }
                        },
                        "id": 7127,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "8946:13:10",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7128,
                        "name": "now",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -17,
                        "src": "8965:3:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[] memory"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          {
                            "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                            "typeString": "address[] memory"
                          },
                          {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 7118,
                          "name": "uniswap",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6184,
                          "src": "8876:7:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_Uniswap_$444",
                            "typeString": "contract Uniswap"
                          }
                        },
                        "id": 7119,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "swapExactETHForTokens",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 366,
                        "src": "8876:29:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_payable$_t_uint256_$_t_array$_t_address_$dyn_memory_ptr_$_t_address_$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$",
                          "typeString": "function (uint256,address[] memory,address,uint256) payable external returns (uint256[] memory)"
                        }
                      },
                      "id": 7121,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "names": [
                        "value"
                      ],
                      "nodeType": "FunctionCallOptions",
                      "options": [
                        {
                          "argumentTypes": null,
                          "id": 7120,
                          "name": "maxFuse",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7085,
                          "src": "8914:7:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "src": "8876:47:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_payable$_t_uint256_$_t_array$_t_address_$dyn_memory_ptr_$_t_address_$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$value",
                        "typeString": "function (uint256,address[] memory,address,uint256) payable external returns (uint256[] memory)"
                      }
                    },
                    "id": 7129,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8876:97:10",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                      "typeString": "uint256[] memory"
                    }
                  },
                  "functionReturnParameters": 7076,
                  "id": 7130,
                  "nodeType": "Return",
                  "src": "8866:107:10"
                }
              ]
            },
            "documentation": {
              "id": 7069,
              "nodeType": "StructuredDocumentation",
              "src": "8431:140:10",
              "text": " @dev internal method to buy GD from fuseswap\n @param _value fuse to be sold\n @return uniswap coversion results uint256[2]"
            },
            "id": 7132,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_buyGD",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 7072,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7071,
                  "mutability": "mutable",
                  "name": "_value",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 7132,
                  "src": "8589:14:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7070,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8589:7:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8588:16:10"
            },
            "returnParameters": {
              "id": 7076,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7075,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 7132,
                  "src": "8623:16:10",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 7073,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "8623:7:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 7074,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "8623:9:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8622:18:10"
            },
            "scope": 7377,
            "src": "8573:404:10",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 7153,
              "nodeType": "Block",
              "src": "9066:125:10",
              "statements": [
                {
                  "assignments": [
                    7140,
                    7142,
                    null
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7140,
                      "mutability": "mutable",
                      "name": "r_fuse",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 7153,
                      "src": "9071:14:10",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7139,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "9071:7:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 7142,
                      "mutability": "mutable",
                      "name": "r_gd",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 7153,
                      "src": "9087:12:10",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7141,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "9087:7:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    null
                  ],
                  "id": 7146,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 7143,
                        "name": "uniswapPair",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6192,
                        "src": "9105:11:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_UniswapPair_$469",
                          "typeString": "contract UniswapPair"
                        }
                      },
                      "id": 7144,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "getReserves",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 463,
                      "src": "9105:23:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$__$returns$_t_uint112_$_t_uint112_$_t_uint32_$",
                        "typeString": "function () view external returns (uint112,uint112,uint32)"
                      }
                    },
                    "id": 7145,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9105:25:10",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint112_$_t_uint112_$_t_uint32_$",
                      "typeString": "tuple(uint112,uint112,uint32)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "9070:60:10"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7148,
                        "name": "r_fuse",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7140,
                        "src": "9166:6:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7149,
                        "name": "r_gd",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7142,
                        "src": "9174:4:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7150,
                        "name": "_value",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7134,
                        "src": "9180:6:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 7147,
                      "name": "calcMaxFuseWithSlippage",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        7154,
                        7323
                      ],
                      "referencedDeclaration": 7323,
                      "src": "9142:23:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256,uint256,uint256) view returns (uint256)"
                      }
                    },
                    "id": 7151,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9142:45:10",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 7138,
                  "id": 7152,
                  "nodeType": "Return",
                  "src": "9135:52:10"
                }
              ]
            },
            "documentation": null,
            "functionSelector": "2cda8943",
            "id": 7154,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "calcMaxFuseWithSlippage",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 7135,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7134,
                  "mutability": "mutable",
                  "name": "_value",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 7154,
                  "src": "9013:14:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7133,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9013:7:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9012:16:10"
            },
            "returnParameters": {
              "id": 7138,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7137,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 7154,
                  "src": "9056:7:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7136,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9056:7:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9055:9:10"
            },
            "scope": 7377,
            "src": "8980:211:10",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 7196,
              "nodeType": "Block",
              "src": "9366:214:10",
              "statements": [
                {
                  "assignments": [
                    7167
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7167,
                      "mutability": "mutable",
                      "name": "amountInWithFee",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 7196,
                      "src": "9370:23:10",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7166,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "9370:7:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7172,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "393937",
                        "id": 7170,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "9410:3:10",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_997_by_1",
                          "typeString": "int_const 997"
                        },
                        "value": "997"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_rational_997_by_1",
                          "typeString": "int_const 997"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 7168,
                        "name": "_amountIn",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7157,
                        "src": "9396:9:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 7169,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mul",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 8053,
                      "src": "9396:13:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 7171,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9396:18:10",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "9370:44:10"
                },
                {
                  "assignments": [
                    7174
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7174,
                      "mutability": "mutable",
                      "name": "numerator",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 7196,
                      "src": "9418:17:10",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7173,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "9418:7:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7179,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7177,
                        "name": "_reserveOut",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7161,
                        "src": "9458:11:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 7175,
                        "name": "amountInWithFee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7167,
                        "src": "9438:15:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 7176,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mul",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 8053,
                      "src": "9438:19:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 7178,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9438:32:10",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "9418:52:10"
                },
                {
                  "assignments": [
                    7181
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7181,
                      "mutability": "mutable",
                      "name": "denominator",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 7196,
                      "src": "9474:19:10",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7180,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "9474:7:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7189,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7187,
                        "name": "amountInWithFee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7167,
                        "src": "9521:15:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "31303030",
                            "id": 7184,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "9511:4:10",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1000_by_1",
                              "typeString": "int_const 1000"
                            },
                            "value": "1000"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_1000_by_1",
                              "typeString": "int_const 1000"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 7182,
                            "name": "_reserveIn",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7159,
                            "src": "9496:10:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 7183,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "mul",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 8053,
                          "src": "9496:14:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                            "typeString": "function (uint256,uint256) pure returns (uint256)"
                          }
                        },
                        "id": 7185,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "9496:20:10",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 7186,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "add",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7973,
                      "src": "9496:24:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 7188,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9496:41:10",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "9474:63:10"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7194,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 7190,
                      "name": "amountOut",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7164,
                      "src": "9541:9:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 7193,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 7191,
                        "name": "numerator",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7174,
                        "src": "9553:9:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "/",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 7192,
                        "name": "denominator",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7181,
                        "src": "9565:11:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "9553:23:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "9541:35:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 7195,
                  "nodeType": "ExpressionStatement",
                  "src": "9541:35:10"
                }
              ]
            },
            "documentation": {
              "id": 7155,
              "nodeType": "StructuredDocumentation",
              "src": "9194:37:10",
              "text": " uniswap amountOut helper"
            },
            "id": 7197,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getAmountOut",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 7162,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7157,
                  "mutability": "mutable",
                  "name": "_amountIn",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 7197,
                  "src": "9258:17:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7156,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9258:7:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7159,
                  "mutability": "mutable",
                  "name": "_reserveIn",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 7197,
                  "src": "9279:18:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7158,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9279:7:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7161,
                  "mutability": "mutable",
                  "name": "_reserveOut",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 7197,
                  "src": "9301:19:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7160,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9301:7:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9254:69:10"
            },
            "returnParameters": {
              "id": 7165,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7164,
                  "mutability": "mutable",
                  "name": "amountOut",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 7197,
                  "src": "9347:17:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7163,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9347:7:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9346:19:10"
            },
            "scope": 7377,
            "src": "9233:347:10",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 7322,
              "nodeType": "Block",
              "src": "9805:1011:10",
              "statements": [
                {
                  "assignments": [
                    7210
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7210,
                      "mutability": "mutable",
                      "name": "start",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 7322,
                      "src": "9809:13:10",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7209,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "9809:7:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7212,
                  "initialValue": {
                    "argumentTypes": null,
                    "hexValue": "30",
                    "id": 7211,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "9825:1:10",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_0_by_1",
                      "typeString": "int_const 0"
                    },
                    "value": "0"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "9809:17:10"
                },
                {
                  "assignments": [
                    7214
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7214,
                      "mutability": "mutable",
                      "name": "end",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 7322,
                      "src": "9830:11:10",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7213,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "9830:7:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7219,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "31653138",
                        "id": 7217,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "9855:4:10",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1000000000000000000_by_1",
                          "typeString": "int_const 1000000000000000000"
                        },
                        "value": "1e18"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_rational_1000000000000000000_by_1",
                          "typeString": "int_const 1000000000000000000"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 7215,
                        "name": "_value",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7204,
                        "src": "9844:6:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 7216,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "div",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 8070,
                      "src": "9844:10:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 7218,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9844:16:10",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "9830:30:10"
                },
                {
                  "assignments": [
                    7221
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7221,
                      "mutability": "mutable",
                      "name": "curPriceWei",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 7322,
                      "src": "9925:19:10",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7220,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "9925:7:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7231,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 7230,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 7227,
                          "name": "r_fuse",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7200,
                          "src": "9964:6:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "313030",
                              "id": 7224,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "9955:3:10",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_100_by_1",
                                "typeString": "int_const 100"
                              },
                              "value": "100"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_100_by_1",
                                "typeString": "int_const 100"
                              }
                            ],
                            "id": 7223,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "9947:7:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint256_$",
                              "typeString": "type(uint256)"
                            },
                            "typeName": {
                              "id": 7222,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "9947:7:10",
                              "typeDescriptions": {
                                "typeIdentifier": null,
                                "typeString": null
                              }
                            }
                          },
                          "id": 7225,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "9947:12:10",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 7226,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "mul",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 8053,
                        "src": "9947:16:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                          "typeString": "function (uint256,uint256) pure returns (uint256)"
                        }
                      },
                      "id": 7228,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "9947:24:10",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "/",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 7229,
                      "name": "r_gd",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7202,
                      "src": "9974:4:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "9947:31:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "9925:53:10"
                },
                {
                  "assignments": [
                    7233
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7233,
                      "mutability": "mutable",
                      "name": "maxPriceWei",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 7322,
                      "src": "10028:19:10",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7232,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "10028:7:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7244,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7242,
                        "name": "RATIO_BASE",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6202,
                        "src": "10107:10:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 7238,
                                "name": "maxSlippageRatio",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6198,
                                "src": "10084:16:10",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 7236,
                                "name": "RATIO_BASE",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6202,
                                "src": "10069:10:10",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 7237,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "add",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 7973,
                              "src": "10069:14:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 7239,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "10069:32:10",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 7234,
                            "name": "curPriceWei",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7221,
                            "src": "10053:11:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 7235,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "mul",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 8053,
                          "src": "10053:15:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                            "typeString": "function (uint256,uint256) pure returns (uint256)"
                          }
                        },
                        "id": 7240,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "10053:49:10",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 7241,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "div",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 8070,
                      "src": "10053:53:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 7243,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10053:65:10",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "10028:90:10"
                },
                {
                  "assignments": [
                    7246
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7246,
                      "mutability": "mutable",
                      "name": "fuseAmount",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 7322,
                      "src": "10122:18:10",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7245,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "10122:7:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7248,
                  "initialValue": {
                    "argumentTypes": null,
                    "id": 7247,
                    "name": "_value",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 7204,
                    "src": "10143:6:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "10122:27:10"
                },
                {
                  "body": {
                    "id": 7318,
                    "nodeType": "Block",
                    "src": "10213:578:10",
                    "statements": [
                      {
                        "assignments": [
                          7253
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 7253,
                            "mutability": "mutable",
                            "name": "midQuantityWei",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 7318,
                            "src": "10243:22:10",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 7252,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "10243:7:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 7264,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "32",
                              "id": 7262,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "10297:1:10",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_2_by_1",
                                "typeString": "int_const 2"
                              },
                              "value": "2"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_2_by_1",
                                "typeString": "int_const 2"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "hexValue": "31653138",
                                  "id": 7259,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "10287:4:10",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_1000000000000000000_by_1",
                                    "typeString": "int_const 1000000000000000000"
                                  },
                                  "value": "1e18"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_rational_1000000000000000000_by_1",
                                    "typeString": "int_const 1000000000000000000"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 7256,
                                      "name": "end",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 7214,
                                      "src": "10278:3:10",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 7254,
                                      "name": "start",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 7210,
                                      "src": "10268:5:10",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 7255,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "add",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 7973,
                                    "src": "10268:9:10",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                      "typeString": "function (uint256,uint256) pure returns (uint256)"
                                    }
                                  },
                                  "id": 7257,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "10268:14:10",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 7258,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "mul",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 8053,
                                "src": "10268:18:10",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                  "typeString": "function (uint256,uint256) pure returns (uint256)"
                                }
                              },
                              "id": 7260,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "10268:24:10",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 7261,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "div",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 8070,
                            "src": "10268:28:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                              "typeString": "function (uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 7263,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "10268:31:10",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "10243:56:10"
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 7267,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 7265,
                            "name": "midQuantityWei",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7253,
                            "src": "10337:14:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 7266,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "10355:1:10",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "10337:19:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 7269,
                        "nodeType": "IfStatement",
                        "src": "10333:30:10",
                        "trueBody": {
                          "id": 7268,
                          "nodeType": "Break",
                          "src": "10358:5:10"
                        }
                      },
                      {
                        "assignments": [
                          7271
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 7271,
                            "mutability": "mutable",
                            "name": "gdForQuantity",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 7318,
                            "src": "10368:21:10",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 7270,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "10368:7:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 7277,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 7273,
                              "name": "midQuantityWei",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7253,
                              "src": "10405:14:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 7274,
                              "name": "r_fuse",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7200,
                              "src": "10421:6:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 7275,
                              "name": "r_gd",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7202,
                              "src": "10429:4:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 7272,
                            "name": "getAmountOut",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7197,
                            "src": "10392:12:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (uint256,uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 7276,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "10392:42:10",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "10368:66:10"
                      },
                      {
                        "assignments": [
                          7279
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 7279,
                            "mutability": "mutable",
                            "name": "priceForQuantityWei",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 7318,
                            "src": "10439:27:10",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 7278,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "10439:7:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 7290,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "316539",
                              "id": 7288,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "10523:3:10",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1000000000_by_1",
                                "typeString": "int_const 1000000000"
                              },
                              "value": "1e9"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_1000000000_by_1",
                                "typeString": "int_const 1000000000"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 7281,
                                  "name": "midQuantityWei",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7253,
                                  "src": "10478:14:10",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "hexValue": "31653136",
                                      "id": 7284,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "10512:4:10",
                                      "subdenomination": null,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_10000000000000000_by_1",
                                        "typeString": "int_const 10000000000000000"
                                      },
                                      "value": "1e16"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_rational_10000000000000000_by_1",
                                        "typeString": "int_const 10000000000000000"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 7282,
                                      "name": "gdForQuantity",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 7271,
                                      "src": "10494:13:10",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 7283,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "mul",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 8053,
                                    "src": "10494:17:10",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                      "typeString": "function (uint256,uint256) pure returns (uint256)"
                                    }
                                  },
                                  "id": 7285,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "10494:23:10",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 7280,
                                "name": "rdiv",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7641,
                                "src": "10473:4:10",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                  "typeString": "function (uint256,uint256) pure returns (uint256)"
                                }
                              },
                              "id": 7286,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "10473:45:10",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 7287,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "div",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 8070,
                            "src": "10473:49:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                              "typeString": "function (uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 7289,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "10473:54:10",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "10439:88:10"
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 7293,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 7291,
                            "name": "priceForQuantityWei",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7279,
                            "src": "10537:19:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 7292,
                            "name": "maxPriceWei",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7233,
                            "src": "10560:11:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "10537:34:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "expression": {
                            "argumentTypes": null,
                            "id": 7315,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "argumentTypes": null,
                              "id": 7308,
                              "name": "end",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7214,
                              "src": "10706:3:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "=",
                            "rightHandSide": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 7314,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "hexValue": "31653138",
                                    "id": 7311,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "10731:4:10",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_1000000000000000000_by_1",
                                      "typeString": "int_const 1000000000000000000"
                                    },
                                    "value": "1e18"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_1000000000000000000_by_1",
                                      "typeString": "int_const 1000000000000000000"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 7309,
                                    "name": "midQuantityWei",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7253,
                                    "src": "10712:14:10",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 7310,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "div",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 8070,
                                  "src": "10712:18:10",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                    "typeString": "function (uint256,uint256) pure returns (uint256)"
                                  }
                                },
                                "id": 7312,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "10712:24:10",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "-",
                              "rightExpression": {
                                "argumentTypes": null,
                                "hexValue": "31",
                                "id": 7313,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "10739:1:10",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_1_by_1",
                                  "typeString": "int_const 1"
                                },
                                "value": "1"
                              },
                              "src": "10712:28:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "10706:34:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 7316,
                          "nodeType": "ExpressionStatement",
                          "src": "10706:34:10"
                        },
                        "id": 7317,
                        "nodeType": "IfStatement",
                        "src": "10533:207:10",
                        "trueBody": {
                          "id": 7307,
                          "nodeType": "Block",
                          "src": "10573:127:10",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 7301,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 7294,
                                  "name": "start",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7210,
                                  "src": "10579:5:10",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 7300,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "hexValue": "31653138",
                                        "id": 7297,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "10606:4:10",
                                        "subdenomination": null,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_1000000000000000000_by_1",
                                          "typeString": "int_const 1000000000000000000"
                                        },
                                        "value": "1e18"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_rational_1000000000000000000_by_1",
                                          "typeString": "int_const 1000000000000000000"
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 7295,
                                        "name": "midQuantityWei",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 7253,
                                        "src": "10587:14:10",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "id": 7296,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "div",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 8070,
                                      "src": "10587:18:10",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                                      }
                                    },
                                    "id": 7298,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "10587:24:10",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "+",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "hexValue": "31",
                                    "id": 7299,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "10614:1:10",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_1_by_1",
                                      "typeString": "int_const 1"
                                    },
                                    "value": "1"
                                  },
                                  "src": "10587:28:10",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "10579:36:10",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 7302,
                              "nodeType": "ExpressionStatement",
                              "src": "10579:36:10"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 7305,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 7303,
                                  "name": "fuseAmount",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7246,
                                  "src": "10667:10:10",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "id": 7304,
                                  "name": "midQuantityWei",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7253,
                                  "src": "10680:14:10",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "10667:27:10",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 7306,
                              "nodeType": "ExpressionStatement",
                              "src": "10667:27:10"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 7251,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 7249,
                      "name": "start",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7210,
                      "src": "10199:5:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 7250,
                      "name": "end",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7214,
                      "src": "10208:3:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "10199:12:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 7319,
                  "nodeType": "WhileStatement",
                  "src": "10192:599:10"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7320,
                    "name": "fuseAmount",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 7246,
                    "src": "10802:10:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 7208,
                  "id": 7321,
                  "nodeType": "Return",
                  "src": "10795:17:10"
                }
              ]
            },
            "documentation": {
              "id": 7198,
              "nodeType": "StructuredDocumentation",
              "src": "9583:102:10",
              "text": " @dev use binary search to find quantity that will result with slippage < maxSlippageRatio"
            },
            "functionSelector": "09b6afb2",
            "id": 7323,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "calcMaxFuseWithSlippage",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 7205,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7200,
                  "mutability": "mutable",
                  "name": "r_fuse",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 7323,
                  "src": "9723:14:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7199,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9723:7:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7202,
                  "mutability": "mutable",
                  "name": "r_gd",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 7323,
                  "src": "9741:12:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7201,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9741:7:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7204,
                  "mutability": "mutable",
                  "name": "_value",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 7323,
                  "src": "9757:14:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7203,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9757:7:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9719:55:10"
            },
            "returnParameters": {
              "id": 7208,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7207,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 7323,
                  "src": "9796:7:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7206,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9796:7:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9795:9:10"
            },
            "scope": 7377,
            "src": "9687:1129:10",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 7356,
              "nodeType": "Block",
              "src": "10914:452:10",
              "statements": [
                {
                  "clauses": [
                    {
                      "block": {
                        "id": 7339,
                        "nodeType": "Block",
                        "src": "10962:21:10",
                        "statements": [
                          {
                            "expression": {
                              "argumentTypes": null,
                              "hexValue": "74727565",
                              "id": 7337,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "bool",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "10974:4:10",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "value": "true"
                            },
                            "functionReturnParameters": 7331,
                            "id": 7338,
                            "nodeType": "Return",
                            "src": "10967:11:10"
                          }
                        ]
                      },
                      "errorName": "",
                      "id": 7340,
                      "nodeType": "TryCatchClause",
                      "parameters": null,
                      "src": "10962:21:10"
                    },
                    {
                      "block": {
                        "id": 7346,
                        "nodeType": "Block",
                        "src": "11029:132:10",
                        "statements": [
                          {
                            "expression": {
                              "argumentTypes": null,
                              "hexValue": "66616c7365",
                              "id": 7344,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "bool",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "11151:5:10",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "value": "false"
                            },
                            "functionReturnParameters": 7331,
                            "id": 7345,
                            "nodeType": "Return",
                            "src": "11144:12:10"
                          }
                        ]
                      },
                      "errorName": "Error",
                      "id": 7347,
                      "nodeType": "TryCatchClause",
                      "parameters": {
                        "id": 7343,
                        "nodeType": "ParameterList",
                        "parameters": [
                          {
                            "constant": false,
                            "id": 7342,
                            "mutability": "mutable",
                            "name": "",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 7347,
                            "src": "11000:13:10",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string"
                            },
                            "typeName": {
                              "id": 7341,
                              "name": "string",
                              "nodeType": "ElementaryTypeName",
                              "src": "11000:6:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_storage_ptr",
                                "typeString": "string"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "src": "10995:33:10"
                      },
                      "src": "10984:177:10"
                    },
                    {
                      "block": {
                        "id": 7353,
                        "nodeType": "Block",
                        "src": "11207:156:10",
                        "statements": [
                          {
                            "expression": {
                              "argumentTypes": null,
                              "hexValue": "66616c7365",
                              "id": 7351,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "bool",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "11353:5:10",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "value": "false"
                            },
                            "functionReturnParameters": 7331,
                            "id": 7352,
                            "nodeType": "Return",
                            "src": "11346:12:10"
                          }
                        ]
                      },
                      "errorName": "",
                      "id": 7354,
                      "nodeType": "TryCatchClause",
                      "parameters": {
                        "id": 7350,
                        "nodeType": "ParameterList",
                        "parameters": [
                          {
                            "constant": false,
                            "id": 7349,
                            "mutability": "mutable",
                            "name": "",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 7354,
                            "src": "11173:12:10",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes"
                            },
                            "typeName": {
                              "id": 7348,
                              "name": "bytes",
                              "nodeType": "ElementaryTypeName",
                              "src": "11173:5:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_storage_ptr",
                                "typeString": "bytes"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "src": "11168:38:10"
                      },
                      "src": "11162:201:10"
                    }
                  ],
                  "externalCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7334,
                        "name": "_validator",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7325,
                        "src": "10941:10:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7335,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7327,
                        "src": "10953:7:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 7332,
                        "name": "consensus",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6182,
                        "src": "10922:9:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IConsensus_$6164",
                          "typeString": "contract IConsensus"
                        }
                      },
                      "id": 7333,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "withdraw",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6147,
                      "src": "10922:18:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256) external"
                      }
                    },
                    "id": 7336,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10922:39:10",
                    "tryCall": true,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7355,
                  "nodeType": "TryStatement",
                  "src": "10918:445:10"
                }
              ]
            },
            "documentation": null,
            "id": 7357,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "undelegateWithCatch",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 7328,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7325,
                  "mutability": "mutable",
                  "name": "_validator",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 7357,
                  "src": "10848:18:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7324,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "10848:7:10",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7327,
                  "mutability": "mutable",
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 7357,
                  "src": "10868:15:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7326,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "10868:7:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10847:37:10"
            },
            "returnParameters": {
              "id": 7331,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7330,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 7357,
                  "src": "10907:4:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 7329,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "10907:4:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10906:6:10"
            },
            "scope": 7377,
            "src": "10819:547:10",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 7371,
              "nodeType": "Block",
              "src": "11420:45:10",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 7366,
                              "name": "this",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -28,
                              "src": "11447:4:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_FuseStakingV3_$7377",
                                "typeString": "contract FuseStakingV3"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_FuseStakingV3_$7377",
                                "typeString": "contract FuseStakingV3"
                              }
                            ],
                            "id": 7365,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "11439:7:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 7364,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "11439:7:10",
                              "typeDescriptions": {
                                "typeIdentifier": null,
                                "typeString": null
                              }
                            }
                          },
                          "id": 7367,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "11439:13:10",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        ],
                        "id": 7363,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "11431:8:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_payable_$",
                          "typeString": "type(address payable)"
                        },
                        "typeName": {
                          "id": 7362,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "11431:8:10",
                          "stateMutability": "payable",
                          "typeDescriptions": {
                            "typeIdentifier": null,
                            "typeString": null
                          }
                        }
                      },
                      "id": 7368,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "11431:22:10",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "id": 7369,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "balance",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": null,
                    "src": "11431:30:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 7361,
                  "id": 7370,
                  "nodeType": "Return",
                  "src": "11424:37:10"
                }
              ]
            },
            "documentation": null,
            "id": 7372,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "balance",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 7358,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "11385:2:10"
            },
            "returnParameters": {
              "id": 7361,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7360,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 7372,
                  "src": "11411:7:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7359,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "11411:7:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11410:9:10"
            },
            "scope": 7377,
            "src": "11369:96:10",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 7375,
              "nodeType": "Block",
              "src": "11495:2:10",
              "statements": []
            },
            "documentation": null,
            "id": 7376,
            "implemented": true,
            "kind": "receive",
            "modifiers": [],
            "name": "",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 7373,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "11475:2:10"
            },
            "returnParameters": {
              "id": 7374,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "11495:0:10"
            },
            "scope": 7377,
            "src": "11468:29:10",
            "stateMutability": "payable",
            "virtual": false,
            "visibility": "external"
          }
        ],
        "scope": 7378,
        "src": "1099:10400:10"
      }
    ],
    "src": "33:11467:10"
  },
  "compiler": {
    "name": "solc",
    "version": "0.6.12+commit.27d51765.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.3.0",
  "updatedAt": "2021-01-17T13:45:27.157Z",
  "devdoc": {
    "kind": "dev",
    "methods": {
      "calcMaxFuseWithSlippage(uint256,uint256,uint256)": {
        "details": "use binary search to find quantity that will result with slippage < maxSlippageRatio"
      },
      "initialize()": {
        "details": "initialize"
      },
      "owner()": {
        "details": "Returns the address of the current owner."
      },
      "renounceOwnership()": {
        "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner."
      },
      "transferOwnership(address)": {
        "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."
      }
    },
    "version": 1
  },
  "userdoc": {
    "kind": "user",
    "methods": {},
    "version": 1
  }
}