{
  "contractName": "AaveLiquidityProxy",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "contract ILendingPoolAddressesProvider",
          "name": "lendingPoolAddressProvider",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "stateMutability": "payable",
      "type": "fallback"
    },
    {
      "stateMutability": "payable",
      "type": "receive"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "tokenAddress",
          "type": "address"
        }
      ],
      "name": "getRepaymentAddress",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "tokenAddress",
          "type": "address"
        }
      ],
      "name": "getTotalReserve",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "tokenAddress",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenAmount",
          "type": "uint256"
        }
      ],
      "name": "getRepaymentAmount",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "tokenAddress",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenAmount",
          "type": "uint256"
        }
      ],
      "name": "borrow",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_reserve",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_fee",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "_params",
          "type": "bytes"
        }
      ],
      "name": "executeOperation",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.7.3+commit.9bfce1f6\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract ILendingPoolAddressesProvider\",\"name\":\"lendingPoolAddressProvider\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenAmount\",\"type\":\"uint256\"}],\"name\":\"borrow\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_reserve\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_fee\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_params\",\"type\":\"bytes\"}],\"name\":\"executeOperation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"}],\"name\":\"getRepaymentAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenAmount\",\"type\":\"uint256\"}],\"name\":\"getRepaymentAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"}],\"name\":\"getTotalReserve\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"/Users/andrekorol/src/kollateral/protocol/contracts/liquidity/aave/AaveLiquidityProxy.sol\":\"AaveLiquidityProxy\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"/Users/andrekorol/src/kollateral/protocol/contracts/common/invoke/IInvocationHook.sol\":{\"keccak256\":\"0x36fb31db8a8e7eed7038b37554582655826969a556005d8ee3ab5070fe034860\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://e0dde70be03ea1e086a5bce0d3a7bb1ac65549eab7ea2618343255332edddca7\",\"dweb:/ipfs/QmVaQG686g3tbgM3L3mtw4ei1WxzcDRcS9UxipSt4KCYs1\"]},\"/Users/andrekorol/src/kollateral/protocol/contracts/common/invoke/IInvoker.sol\":{\"keccak256\":\"0x8a9fcbe16fdb00f3b5f32c528564cf4ba5c47ed9741a673973087d4d604e0b5a\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://b4af56bf9d2bd95bddca2156c6eea65c5caf0117d9a99d6cc575ac2c329bd672\",\"dweb:/ipfs/QmTxg3NpWNAxaVHKYU1cdVboo962auWmq5pmS9XvXcXNAF\"]},\"/Users/andrekorol/src/kollateral/protocol/contracts/common/utils/BalanceCarrier.sol\":{\"keccak256\":\"0x69e63e482d839c831c8c32f002e6454f6a8d9e602b39e9cdc1c0649451df3337\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://0a40661372b8f95cbed7714a16323b435ccbe85205178d32bc6012e47bfc0640\",\"dweb:/ipfs/QmTyHr1Ag4AkcyazzTT5GDcWabAMHPTrELoGhL85ZWDgBy\"]},\"/Users/andrekorol/src/kollateral/protocol/contracts/common/utils/ExternalCaller.sol\":{\"keccak256\":\"0x54f88a1f0ac5dd7ab99a0519124cb09f1e19b4efb9baf240bc2500f8caa0b4ff\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://3170671378d20b47498224d065e33fccc223ae772d7f0af2c5ef314f94b75c98\",\"dweb:/ipfs/Qme8ZEEBnBG5Vvj8uyJCD2YVPcLx6funKsSSCpGkTyn1zi\"]},\"/Users/andrekorol/src/kollateral/protocol/contracts/liquidity/ILiquidityProxy.sol\":{\"keccak256\":\"0xd463abb162d0ce2e2d1a5f80b6b1254857e8800b930b4d8d1c3557c444d6363d\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://1c65c049566e4b8586ffb7ab62018d49f09d8f915450f6e79a0db84e4500fffb\",\"dweb:/ipfs/QmNSjMiWsY2Tt9eMYyNf3oGTFWDJjnWpgmVWTY6zKBAy3f\"]},\"/Users/andrekorol/src/kollateral/protocol/contracts/liquidity/aave/AaveLiquidityProxy.sol\":{\"keccak256\":\"0x9b821df2d33aba73b8e82e34f42a546d4251da3eaf2cfde456eaba76779028b9\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://d4d9f0dfdff1685b0b155223eefacf1b55524a050711922c5ce0ad334e2e5567\",\"dweb:/ipfs/QmQpjn3eP7ctXUqqcwe8vCLyqvfxmrT5vGsfy6A543oDAm\"]},\"/Users/andrekorol/src/kollateral/protocol/contracts/liquidity/aave/ILendingPool.sol\":{\"keccak256\":\"0x9e97f4e47e98a1ade637d849dc0fd02e530a8bad4f80b41606bb4bb554484951\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://1e6a4d959bb2cc99001596ff02633c3c53a3eca753859d6c458abe40817738c8\",\"dweb:/ipfs/QmTEwfaKaf9tfAuEiqKLid1RtcrJY5sd5kCCgsnqBacTAM\"]},\"/Users/andrekorol/src/kollateral/protocol/contracts/liquidity/aave/ILendingPoolAddressesProvider.sol\":{\"keccak256\":\"0xbadf15d542d9a305bd83bbf2ea5598bb8a4b51cc23dd3fb6884939fdf501be6f\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://69252ae62cca09c7d8341e637bf0c4fde7c6c8c3827456d8921ae0dbf95dfd8e\",\"dweb:/ipfs/QmU9JMmtZNbDveDCzgsTPsQkga4zhr8JAKbZchDvmcECkK\"]},\"/Users/andrekorol/src/kollateral/protocol/contracts/liquidity/aave/ILendingPoolCore.sol\":{\"keccak256\":\"0x0a7a1d395d6ff90fe31aaaf58481d325581d74a9a143e027d2bba93e6efdd6ef\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://c8bcb84aa556a504882753e5a8eebabc0e90bf7e49527cbd2507a192e0d05ee5\",\"dweb:/ipfs/QmbgfHBVyw6ppaLiPXKV5bp3FxCYU6pxRxtQciVQEBEvc1\"]},\"/Users/andrekorol/src/kollateral/protocol/contracts/liquidity/aave/ILendingPoolParametersProvider.sol\":{\"keccak256\":\"0x5e3cbf60f6b1d1707876c03194566b5b983fde316e5e2ea6bb462c8ccd1f9ba3\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://5c87a747a9ad781091b9691bdae1916c21c86df798740f2e026b73ed3b69d814\",\"dweb:/ipfs/QmXyZQPyJhWvXPDWmAbZieDqBAzKsybDGbrjXQB6aydF3Z\"]},\"@openzeppelin/contracts/math/SafeMath.sol\":{\"keccak256\":\"0xba96bc371ba999f452985a98717cca1e4c4abb598dc038a9a9c3db08129b1ba4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://26e50e3f7b6482fb6f598f2e006994a74aa492687daa4b3eee7fd4fb5398ce7f\",\"dweb:/ipfs/QmZudqoPSkA4USLMFsBBmt19dDPZFS8aaAmL5R7pECXu6t\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xbd74f587ab9b9711801baf667db1426e4a03fd2d7f15af33e0e0d0394e7cef76\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2d0913dfbfce90d170df0d496ad7596c0778518e5fa7aba6c32562522546f66b\",\"dweb:/ipfs/QmR6B8nLj2PJf5e1JWD9Nk7ErkAwkqUwadCnvE82FJr1RU\"]}},\"version\":1}",
  "bytecode": "0x608060405273eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555034801561006557600080fd5b506040516113523803806113528339818101604052602081101561008857600080fd5b8101908080519060200190929190505050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505080600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550506112048061014e6000396000f3fe60806040526004361061004e5760003560e01c80634b8a352914610057578063680c7b94146100b2578063aa8190571461012d578063c32dc3b61461019c578063ee8725581461020157610055565b3661005557005b005b34801561006357600080fd5b506100b06004803603604081101561007a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506102bb565b005b3480156100be57600080fd5b50610101600480360360208110156100d557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506104ad565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561013957600080fd5b506101866004803603604081101561015057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610559565b6040518082815260200191505060405180910390f35b3480156101a857600080fd5b506101eb600480360360208110156101bf57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506106dc565b6040518082815260200191505060405180910390f35b34801561020d57600080fd5b506102b96004803603608081101561022457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001909291908035906020019064010000000081111561027557600080fd5b82018360208201111561028757600080fd5b803590602001918460018302840111640100000000831117156102a957600080fd5b9091929391929390505050610899565b005b33600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630261bf8b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561036657600080fd5b505afa15801561037a573d6000803e3d6000fd5b505050506040513d602081101561039057600080fd5b810190808051906020019092919050505090508073ffffffffffffffffffffffffffffffffffffffff16635cffe9de306103c986610a52565b856040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200180602001828103825260008152602001602001945050505050600060405180830381600087803b15801561044e57600080fd5b505af1158015610462573d6000803e3d6000fd5b505050506000600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ed6ff7606040518163ffffffff1660e01b815260040160206040518083038186803b15801561051757600080fd5b505afa15801561052b573d6000803e3d6000fd5b505050506040513d602081101561054157600080fd5b81019080805190602001909291905050509050919050565b600080600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166304061d8e6040518163ffffffff1660e01b815260040160206040518083038186803b1580156105c457600080fd5b505afa1580156105d8573d6000803e3d6000fd5b505050506040513d60208110156105ee57600080fd5b810190808051906020019092919050505090506000808273ffffffffffffffffffffffffffffffffffffffff1663586feb406040518163ffffffff1660e01b8152600401604080518083038186803b15801561064957600080fd5b505afa15801561065d573d6000803e3d6000fd5b505050506040513d604081101561067357600080fd5b8101908080519060200190929190805190602001909291905050509150915060006106bb6127106106ad8589610ab990919063ffffffff16565b610b3f90919063ffffffff16565b90506106d08187610b8990919063ffffffff16565b94505050505092915050565b600080600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ed6ff7606040518163ffffffff1660e01b815260040160206040518083038186803b15801561074757600080fd5b505afa15801561075b573d6000803e3d6000fd5b505050506040513d602081101561077157600080fd5b8101908080519060200190929190505050905061078d83610c11565b1561088e57600173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461086d578273ffffffffffffffffffffffffffffffffffffffff166370a08231826040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561082d57600080fd5b505afa158015610841573d6000803e3d6000fd5b505050506040513d602081101561085757600080fd5b8101908080519060200190929190505050610886565b8073ffffffffffffffffffffffffffffffffffffffff16315b915050610894565b60009150505b919050565b600073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610941576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806111356021913960400191505060405180910390fd5b61096e85600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1686610d6b565b6109c3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180611180602e913960400191505060405180910390fd5b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff16630a5ca4e86040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610a3257600080fd5b505af1158015610a46573d6000803e3d6000fd5b50505050505050505050565b6000600173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614610a8e5781610ab2565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff165b9050919050565b600080831415610acc5760009050610b39565b6000828402905082848281610add57fe5b0414610b34576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806111ae6021913960400191505060405180910390fd5b809150505b92915050565b6000610b8183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250610e8b565b905092915050565b600080828401905083811015610c07576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600080600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ed6ff7606040518163ffffffff1660e01b815260040160206040518083038186803b158015610c7c57600080fd5b505afa158015610c90573d6000803e3d6000fd5b505050506040513d6020811015610ca657600080fd5b810190808051906020019092919050505090508073ffffffffffffffffffffffffffffffffffffffff166305075d6e610cde85610a52565b6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610d2857600080fd5b505afa158015610d3c573d6000803e3d6000fd5b505050506040513d6020811015610d5257600080fd5b8101908080519060200190929190505050915050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415610dd557610dcc8383610f51565b60019050610e84565b8373ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015610e4657600080fd5b505af1158015610e5a573d6000803e3d6000fd5b505050506040513d6020811015610e7057600080fd5b810190808051906020019092919050505090505b9392505050565b60008083118290610f37576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610efc578082015181840152602081019050610ee1565b50505050905090810190601f168015610f295780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581610f4357fe5b049050809150509392505050565b80471015610faa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180611156602a913960400191505060405180910390fd5b610fc4828260405180602001604052806000815250610fc8565b5050565b600060608473ffffffffffffffffffffffffffffffffffffffff1684846040518082805190602001908083835b602083106110185780518252602082019150602081019050602083039250610ff5565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d806000811461107a576040519150601f19603f3d011682016040523d82523d6000602084013e61107f565b606091505b509150915081819061112c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156110f15780820151818401526020810190506110d6565b50505050905090810190601f16801561111e5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50505050505056fe416176654c697175696469747950726f78793a206e6f74207363686564756c656445787465726e616c43616c6c65723a20696e73756666696369656e742065746865722062616c616e6365416176654c697175696469747950726f78793a207472616e7366657220746f20696e766f6b6572206661696c6564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a264697066735822122017aa1e930efb28102c4e47be8bad5e5b62baa272edbc333b2a466541064bebb964736f6c63430007030033",
  "deployedBytecode": "0x60806040526004361061004e5760003560e01c80634b8a352914610057578063680c7b94146100b2578063aa8190571461012d578063c32dc3b61461019c578063ee8725581461020157610055565b3661005557005b005b34801561006357600080fd5b506100b06004803603604081101561007a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506102bb565b005b3480156100be57600080fd5b50610101600480360360208110156100d557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506104ad565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561013957600080fd5b506101866004803603604081101561015057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610559565b6040518082815260200191505060405180910390f35b3480156101a857600080fd5b506101eb600480360360208110156101bf57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506106dc565b6040518082815260200191505060405180910390f35b34801561020d57600080fd5b506102b96004803603608081101561022457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001909291908035906020019064010000000081111561027557600080fd5b82018360208201111561028757600080fd5b803590602001918460018302840111640100000000831117156102a957600080fd5b9091929391929390505050610899565b005b33600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630261bf8b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561036657600080fd5b505afa15801561037a573d6000803e3d6000fd5b505050506040513d602081101561039057600080fd5b810190808051906020019092919050505090508073ffffffffffffffffffffffffffffffffffffffff16635cffe9de306103c986610a52565b856040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200180602001828103825260008152602001602001945050505050600060405180830381600087803b15801561044e57600080fd5b505af1158015610462573d6000803e3d6000fd5b505050506000600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ed6ff7606040518163ffffffff1660e01b815260040160206040518083038186803b15801561051757600080fd5b505afa15801561052b573d6000803e3d6000fd5b505050506040513d602081101561054157600080fd5b81019080805190602001909291905050509050919050565b600080600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166304061d8e6040518163ffffffff1660e01b815260040160206040518083038186803b1580156105c457600080fd5b505afa1580156105d8573d6000803e3d6000fd5b505050506040513d60208110156105ee57600080fd5b810190808051906020019092919050505090506000808273ffffffffffffffffffffffffffffffffffffffff1663586feb406040518163ffffffff1660e01b8152600401604080518083038186803b15801561064957600080fd5b505afa15801561065d573d6000803e3d6000fd5b505050506040513d604081101561067357600080fd5b8101908080519060200190929190805190602001909291905050509150915060006106bb6127106106ad8589610ab990919063ffffffff16565b610b3f90919063ffffffff16565b90506106d08187610b8990919063ffffffff16565b94505050505092915050565b600080600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ed6ff7606040518163ffffffff1660e01b815260040160206040518083038186803b15801561074757600080fd5b505afa15801561075b573d6000803e3d6000fd5b505050506040513d602081101561077157600080fd5b8101908080519060200190929190505050905061078d83610c11565b1561088e57600173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461086d578273ffffffffffffffffffffffffffffffffffffffff166370a08231826040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561082d57600080fd5b505afa158015610841573d6000803e3d6000fd5b505050506040513d602081101561085757600080fd5b8101908080519060200190929190505050610886565b8073ffffffffffffffffffffffffffffffffffffffff16315b915050610894565b60009150505b919050565b600073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610941576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806111356021913960400191505060405180910390fd5b61096e85600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1686610d6b565b6109c3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180611180602e913960400191505060405180910390fd5b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff16630a5ca4e86040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610a3257600080fd5b505af1158015610a46573d6000803e3d6000fd5b50505050505050505050565b6000600173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614610a8e5781610ab2565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff165b9050919050565b600080831415610acc5760009050610b39565b6000828402905082848281610add57fe5b0414610b34576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806111ae6021913960400191505060405180910390fd5b809150505b92915050565b6000610b8183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250610e8b565b905092915050565b600080828401905083811015610c07576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600080600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ed6ff7606040518163ffffffff1660e01b815260040160206040518083038186803b158015610c7c57600080fd5b505afa158015610c90573d6000803e3d6000fd5b505050506040513d6020811015610ca657600080fd5b810190808051906020019092919050505090508073ffffffffffffffffffffffffffffffffffffffff166305075d6e610cde85610a52565b6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610d2857600080fd5b505afa158015610d3c573d6000803e3d6000fd5b505050506040513d6020811015610d5257600080fd5b8101908080519060200190929190505050915050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415610dd557610dcc8383610f51565b60019050610e84565b8373ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015610e4657600080fd5b505af1158015610e5a573d6000803e3d6000fd5b505050506040513d6020811015610e7057600080fd5b810190808051906020019092919050505090505b9392505050565b60008083118290610f37576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610efc578082015181840152602081019050610ee1565b50505050905090810190601f168015610f295780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581610f4357fe5b049050809150509392505050565b80471015610faa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180611156602a913960400191505060405180910390fd5b610fc4828260405180602001604052806000815250610fc8565b5050565b600060608473ffffffffffffffffffffffffffffffffffffffff1684846040518082805190602001908083835b602083106110185780518252602082019150602081019050602083039250610ff5565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d806000811461107a576040519150601f19603f3d011682016040523d82523d6000602084013e61107f565b606091505b509150915081819061112c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156110f15780820151818401526020810190506110d6565b50505050905090810190601f16801561111e5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50505050505056fe416176654c697175696469747950726f78793a206e6f74207363686564756c656445787465726e616c43616c6c65723a20696e73756666696369656e742065746865722062616c616e6365416176654c697175696469747950726f78793a207472616e7366657220746f20696e766f6b6572206661696c6564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a264697066735822122017aa1e930efb28102c4e47be8bad5e5b62baa272edbc333b2a466541064bebb964736f6c63430007030033",
  "immutableReferences": {},
  "generatedSources": [],
  "deployedGeneratedSources": [],
  "sourceMap": "1054:3250:16:-:0;;;1203:42;1156:89;;;;;;;;;;;;;;;;;;;;1380:191;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1473:19;;;;;;;;;;;916:15:7;897:16;;:34;;;;;;;;;;;;;;;;;;850:88;1538:26:16::1;1508:27;;:56;;;;;;;;;;;;;;;;;;1380:191:::0;1054:3250;;;;;;",
  "deployedSourceMap": "1054:3250:16:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2811:469;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;1648:200;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;2293:512;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1854:433;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;3286:533;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;2811:469;2944:10;2918:23;;:36;;;;;;;;;;;;;;;;;;2965:24;3018:27;;;;;;;;;;;:42;;;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2965:107;;3082:11;:21;;;3125:4;3144:31;3162:12;3144:17;:31::i;:::-;3189:11;3082:144;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3271:1;3237:23;;:36;;;;;;;;;;;;;;;;;;2811:469;;;:::o;1648:200::-;1763:7;1793:27;;;;;;;;;;;:46;;;:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1786:55;;1648:200;;;:::o;2293:512::-;2428:7;2451:37;2535:27;;;;;;;;;;;:60;;;:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2451:156;;2618:20;2640:9;2653:6;:29;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2617:67;;;;2695:17;2715:40;2749:5;2715:29;2731:12;2715:11;:15;;:29;;;;:::i;:::-;:33;;:40;;;;:::i;:::-;2695:60;;2772:26;2788:9;2772:11;:15;;:26;;;;:::i;:::-;2765:33;;;;;;2293:512;;;;:::o;1854:433::-;1965:7;1988:12;2003:27;;;;;;;;;;;:46;;;:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1988:63;;2066:26;2079:12;2066;:26::i;:::-;2062:200;;;2155:1;2131:26;;:12;:26;;;:120;;2222:12;2215:30;;;2246:4;2215:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2131:120;;;2180:4;:12;;;2131:120;2108:143;;;;;2062:200;2279:1;2272:8;;;1854:433;;;;:::o;3286:533::-;3498:1;3463:37;;:23;;;;;;;;;;;:37;;;;3442:117;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3591:52;3600:8;3610:23;;;;;;;;;;;3635:7;3591:8;:52::i;:::-;3570:145;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3726:16;3754:23;;;;;;;;;;;3726:52;;3788:7;:22;;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3286:533;;;;;;:::o;4106:196::-;4202:7;4256:1;4232:26;;:12;:26;;;:63;;4283:12;4232:63;;;4261:19;;;;;;;;;;;4232:63;4225:70;;4106:196;;;:::o;2180:459:40:-;2238:7;2484:1;2479;:6;2475:45;;;2508:1;2501:8;;;;2475:45;2530:9;2546:1;2542;:5;2530:17;;2574:1;2569;2565;:5;;;;;;:10;2557:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2631:1;2624:8;;;2180:459;;;;;:::o;3101:130::-;3159:7;3185:39;3189:1;3192;3185:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;3178:46;;3101:130;;;;:::o;874:176::-;932:7;951:9;967:1;963;:5;951:17;;991:1;986;:6;;978:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1042:1;1035:8;;;874:176;;;;:::o;3825:275:16:-;3892:4;3908:21;3962:27;;;;;;;;;;;:46;;;:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3908:112;;4037:4;:23;;;4061:31;4079:12;4061:17;:31::i;:::-;4037:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4030:63;;;3825:275;;;:::o;944:333:7:-;1060:4;1096:16;;;;;;;;;;;1080:32;;:12;:32;;;1076:195;;;1128:28;1145:2;1149:6;1128:16;:28::i;:::-;1177:4;1170:11;;;;1076:195;1226:12;1219:29;;;1249:2;1253:6;1219:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1212:48;;944:333;;;;;;:::o;3713:272:40:-;3799:7;3830:1;3826;:5;3833:12;3818:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3856:9;3872:1;3868;:5;;;;;;3856:17;;3977:1;3970:8;;;3713:272;;;;;:::o;695:240:9:-;815:6;790:21;:31;;769:120;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;899:29;912:3;917:6;899:29;;;;;;;;;;;;:12;:29::i;:::-;695:240;;:::o;941:267::-;1062:12;1076:23;1103:3;:8;;1119:6;1140:5;1103:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1061:94;;;;1173:7;1189:10;1165:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;941:267;;;;;:::o",
  "source": "/*\n\n    Copyright 2020 Kollateral LLC.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n*/\n\n// SPDX-License-Identifier: Apache-2.0\npragma solidity ^0.7.0;\n\nimport \"@openzeppelin/contracts/math/SafeMath.sol\";\nimport \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\nimport \"../../common/utils/BalanceCarrier.sol\";\nimport \"../../common/invoke/IInvoker.sol\";\nimport \"../ILiquidityProxy.sol\";\nimport \"./ILendingPoolAddressesProvider.sol\";\nimport \"./ILendingPool.sol\";\nimport \"./ILendingPoolCore.sol\";\nimport \"./ILendingPoolParametersProvider.sol\";\n\ncontract AaveLiquidityProxy is ILiquidityProxy, BalanceCarrier {\n    using SafeMath for uint256;\n\n    address\n        internal ETHER_TOKEN_ADDRESS = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE;\n\n    ILendingPoolAddressesProvider internal _lendingPoolAddressProvider;\n\n    address payable internal _scheduleInvokerAddress;\n\n    constructor(ILendingPoolAddressesProvider lendingPoolAddressProvider)\n        BalanceCarrier(ETHER_TOKEN_ADDRESS)\n    {\n        _lendingPoolAddressProvider = lendingPoolAddressProvider;\n    }\n\n    receive() external payable {}\n\n    fallback() external payable {}\n\n    function getRepaymentAddress(address tokenAddress)\n        external\n        view\n        override\n        returns (address)\n    {\n        return _lendingPoolAddressProvider.getLendingPoolCore();\n    }\n\n    function getTotalReserve(address tokenAddress)\n        external\n        view\n        override\n        returns (uint256)\n    {\n        address core = _lendingPoolAddressProvider.getLendingPoolCore();\n\n        if (isRegistered(tokenAddress)) {\n            return\n                tokenAddress == address(1)\n                    ? core.balance\n                    : IERC20(tokenAddress).balanceOf(core);\n        }\n\n        return 0;\n    }\n\n    function getRepaymentAmount(address tokenAddress, uint256 tokenAmount)\n        external\n        view\n        override\n        returns (uint256)\n    {\n        ILendingPoolParametersProvider params = ILendingPoolParametersProvider(\n            _lendingPoolAddressProvider.getLendingPoolParametersProvider()\n        );\n        (uint256 totalFeeBips, uint256 _) = params.getFlashLoanFeesInBips();\n\n        uint256 amountFee = tokenAmount.mul(totalFeeBips).div(10000);\n        return tokenAmount.add(amountFee);\n    }\n\n    function borrow(address tokenAddress, uint256 tokenAmount)\n        external\n        override\n    {\n        _scheduleInvokerAddress = msg.sender;\n\n        ILendingPool lendingPool = ILendingPool(\n            _lendingPoolAddressProvider.getLendingPool()\n        );\n        lendingPool.flashLoan(\n            address(this),\n            remapTokenAddress(tokenAddress),\n            tokenAmount,\n            \"\"\n        );\n\n        _scheduleInvokerAddress = address(0);\n    }\n\n    function executeOperation(\n        address _reserve,\n        uint256 _amount,\n        uint256 _fee,\n        bytes calldata _params\n    ) external {\n        require(\n            _scheduleInvokerAddress != address(0),\n            \"AaveLiquidityProxy: not scheduled\"\n        );\n\n        require(\n            transfer(_reserve, _scheduleInvokerAddress, _amount),\n            \"AaveLiquidityProxy: transfer to invoker failed\"\n        );\n\n        IInvoker invoker = IInvoker(_scheduleInvokerAddress);\n        invoker.invokeCallback();\n    }\n\n    function isRegistered(address tokenAddress) internal view returns (bool) {\n        ILendingPoolCore core = ILendingPoolCore(\n            _lendingPoolAddressProvider.getLendingPoolCore()\n        );\n        return core.getReserveIsActive(remapTokenAddress(tokenAddress));\n    }\n\n    function remapTokenAddress(address tokenAddress)\n        internal\n        view\n        returns (address)\n    {\n        return tokenAddress == address(1) ? ETHER_TOKEN_ADDRESS : tokenAddress;\n    }\n}\n",
  "sourcePath": "/Users/andrekorol/src/kollateral/protocol/contracts/liquidity/aave/AaveLiquidityProxy.sol",
  "ast": {
    "absolutePath": "/Users/andrekorol/src/kollateral/protocol/contracts/liquidity/aave/AaveLiquidityProxy.sol",
    "exportedSymbols": {
      "AaveLiquidityProxy": [
        2414
      ],
      "BalanceCarrier": [
        1464
      ],
      "ExternalCaller": [
        1563
      ],
      "IERC20": [
        6165
      ],
      "IInvocationHook": [
        1170
      ],
      "IInvoker": [
        1234
      ],
      "ILendingPool": [
        2428
      ],
      "ILendingPoolAddressesProvider": [
        2446
      ],
      "ILendingPoolCore": [
        2456
      ],
      "ILendingPoolParametersProvider": [
        2466
      ],
      "ILiquidityProxy": [
        2148
      ],
      "SafeMath": [
        5584
      ]
    },
    "id": 2415,
    "license": "Apache-2.0",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 2150,
        "literals": [
          "solidity",
          "^",
          "0.7",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "640:23:16"
      },
      {
        "absolutePath": "@openzeppelin/contracts/math/SafeMath.sol",
        "file": "@openzeppelin/contracts/math/SafeMath.sol",
        "id": 2151,
        "nodeType": "ImportDirective",
        "scope": 2415,
        "sourceUnit": 5585,
        "src": "665:51:16",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@openzeppelin/contracts/token/ERC20/IERC20.sol",
        "file": "@openzeppelin/contracts/token/ERC20/IERC20.sol",
        "id": 2152,
        "nodeType": "ImportDirective",
        "scope": 2415,
        "sourceUnit": 6166,
        "src": "717:56:16",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/andrekorol/src/kollateral/protocol/contracts/common/utils/BalanceCarrier.sol",
        "file": "../../common/utils/BalanceCarrier.sol",
        "id": 2153,
        "nodeType": "ImportDirective",
        "scope": 2415,
        "sourceUnit": 1465,
        "src": "774:47:16",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/andrekorol/src/kollateral/protocol/contracts/common/invoke/IInvoker.sol",
        "file": "../../common/invoke/IInvoker.sol",
        "id": 2154,
        "nodeType": "ImportDirective",
        "scope": 2415,
        "sourceUnit": 1235,
        "src": "822:42:16",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/andrekorol/src/kollateral/protocol/contracts/liquidity/ILiquidityProxy.sol",
        "file": "../ILiquidityProxy.sol",
        "id": 2155,
        "nodeType": "ImportDirective",
        "scope": 2415,
        "sourceUnit": 2149,
        "src": "865:32:16",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/andrekorol/src/kollateral/protocol/contracts/liquidity/aave/ILendingPoolAddressesProvider.sol",
        "file": "./ILendingPoolAddressesProvider.sol",
        "id": 2156,
        "nodeType": "ImportDirective",
        "scope": 2415,
        "sourceUnit": 2447,
        "src": "898:45:16",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/andrekorol/src/kollateral/protocol/contracts/liquidity/aave/ILendingPool.sol",
        "file": "./ILendingPool.sol",
        "id": 2157,
        "nodeType": "ImportDirective",
        "scope": 2415,
        "sourceUnit": 2429,
        "src": "944:28:16",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/andrekorol/src/kollateral/protocol/contracts/liquidity/aave/ILendingPoolCore.sol",
        "file": "./ILendingPoolCore.sol",
        "id": 2158,
        "nodeType": "ImportDirective",
        "scope": 2415,
        "sourceUnit": 2457,
        "src": "973:32:16",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/andrekorol/src/kollateral/protocol/contracts/liquidity/aave/ILendingPoolParametersProvider.sol",
        "file": "./ILendingPoolParametersProvider.sol",
        "id": 2159,
        "nodeType": "ImportDirective",
        "scope": 2415,
        "sourceUnit": 2467,
        "src": "1006:46:16",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "baseName": {
              "id": 2160,
              "name": "ILiquidityProxy",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 2148,
              "src": "1085:15:16",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ILiquidityProxy_$2148",
                "typeString": "contract ILiquidityProxy"
              }
            },
            "id": 2161,
            "nodeType": "InheritanceSpecifier",
            "src": "1085:15:16"
          },
          {
            "baseName": {
              "id": 2162,
              "name": "BalanceCarrier",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 1464,
              "src": "1102:14:16",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_BalanceCarrier_$1464",
                "typeString": "contract BalanceCarrier"
              }
            },
            "id": 2163,
            "nodeType": "InheritanceSpecifier",
            "src": "1102:14:16"
          }
        ],
        "contractDependencies": [
          1464,
          1563,
          2148
        ],
        "contractKind": "contract",
        "fullyImplemented": true,
        "id": 2414,
        "linearizedBaseContracts": [
          2414,
          1464,
          1563,
          2148
        ],
        "name": "AaveLiquidityProxy",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "id": 2166,
            "libraryName": {
              "id": 2164,
              "name": "SafeMath",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 5584,
              "src": "1129:8:16",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_SafeMath_$5584",
                "typeString": "library SafeMath"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "1123:27:16",
            "typeName": {
              "id": 2165,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1142:7:16",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            }
          },
          {
            "constant": false,
            "id": 2169,
            "mutability": "mutable",
            "name": "ETHER_TOKEN_ADDRESS",
            "nodeType": "VariableDeclaration",
            "scope": 2414,
            "src": "1156:89:16",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 2167,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "1156:7:16",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "value": {
              "hexValue": "307845656565654565656545654565654565456545656545454565656565456565656565656545456545",
              "id": 2168,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1203:42:16",
              "typeDescriptions": {
                "typeIdentifier": "t_address_payable",
                "typeString": "address payable"
              },
              "value": "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE"
            },
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 2171,
            "mutability": "mutable",
            "name": "_lendingPoolAddressProvider",
            "nodeType": "VariableDeclaration",
            "scope": 2414,
            "src": "1252:66:16",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_ILendingPoolAddressesProvider_$2446",
              "typeString": "contract ILendingPoolAddressesProvider"
            },
            "typeName": {
              "id": 2170,
              "name": "ILendingPoolAddressesProvider",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 2446,
              "src": "1252:29:16",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ILendingPoolAddressesProvider_$2446",
                "typeString": "contract ILendingPoolAddressesProvider"
              }
            },
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 2173,
            "mutability": "mutable",
            "name": "_scheduleInvokerAddress",
            "nodeType": "VariableDeclaration",
            "scope": 2414,
            "src": "1325:48:16",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address_payable",
              "typeString": "address payable"
            },
            "typeName": {
              "id": 2172,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "1325:15:16",
              "stateMutability": "payable",
              "typeDescriptions": {
                "typeIdentifier": "t_address_payable",
                "typeString": "address payable"
              }
            },
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2185,
              "nodeType": "Block",
              "src": "1498:73:16",
              "statements": [
                {
                  "expression": {
                    "id": 2183,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 2181,
                      "name": "_lendingPoolAddressProvider",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2171,
                      "src": "1508:27:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ILendingPoolAddressesProvider_$2446",
                        "typeString": "contract ILendingPoolAddressesProvider"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 2182,
                      "name": "lendingPoolAddressProvider",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2175,
                      "src": "1538:26:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ILendingPoolAddressesProvider_$2446",
                        "typeString": "contract ILendingPoolAddressesProvider"
                      }
                    },
                    "src": "1508:56:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ILendingPoolAddressesProvider_$2446",
                      "typeString": "contract ILendingPoolAddressesProvider"
                    }
                  },
                  "id": 2184,
                  "nodeType": "ExpressionStatement",
                  "src": "1508:56:16"
                }
              ]
            },
            "id": 2186,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [
              {
                "arguments": [
                  {
                    "id": 2178,
                    "name": "ETHER_TOKEN_ADDRESS",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2169,
                    "src": "1473:19:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 2179,
                "modifierName": {
                  "id": 2177,
                  "name": "BalanceCarrier",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1464,
                  "src": "1458:14:16",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_BalanceCarrier_$1464_$",
                    "typeString": "type(contract BalanceCarrier)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1458:35:16"
              }
            ],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2176,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2175,
                  "mutability": "mutable",
                  "name": "lendingPoolAddressProvider",
                  "nodeType": "VariableDeclaration",
                  "scope": 2186,
                  "src": "1392:56:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ILendingPoolAddressesProvider_$2446",
                    "typeString": "contract ILendingPoolAddressesProvider"
                  },
                  "typeName": {
                    "id": 2174,
                    "name": "ILendingPoolAddressesProvider",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 2446,
                    "src": "1392:29:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ILendingPoolAddressesProvider_$2446",
                      "typeString": "contract ILendingPoolAddressesProvider"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1391:58:16"
            },
            "returnParameters": {
              "id": 2180,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1498:0:16"
            },
            "scope": 2414,
            "src": "1380:191:16",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 2189,
              "nodeType": "Block",
              "src": "1604:2:16",
              "statements": []
            },
            "id": 2190,
            "implemented": true,
            "kind": "receive",
            "modifiers": [],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2187,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1584:2:16"
            },
            "returnParameters": {
              "id": 2188,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1604:0:16"
            },
            "scope": 2414,
            "src": "1577:29:16",
            "stateMutability": "payable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 2193,
              "nodeType": "Block",
              "src": "1640:2:16",
              "statements": []
            },
            "id": 2194,
            "implemented": true,
            "kind": "fallback",
            "modifiers": [],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2191,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1620:2:16"
            },
            "returnParameters": {
              "id": 2192,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1640:0:16"
            },
            "scope": 2414,
            "src": "1612:30:16",
            "stateMutability": "payable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              2131
            ],
            "body": {
              "id": 2206,
              "nodeType": "Block",
              "src": "1776:72:16",
              "statements": [
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "id": 2202,
                        "name": "_lendingPoolAddressProvider",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2171,
                        "src": "1793:27:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ILendingPoolAddressesProvider_$2446",
                          "typeString": "contract ILendingPoolAddressesProvider"
                        }
                      },
                      "id": 2203,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "getLendingPoolCore",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2440,
                      "src": "1793:46:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$__$returns$_t_address_payable_$",
                        "typeString": "function () view external returns (address payable)"
                      }
                    },
                    "id": 2204,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1793:48:16",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "functionReturnParameters": 2201,
                  "id": 2205,
                  "nodeType": "Return",
                  "src": "1786:55:16"
                }
              ]
            },
            "functionSelector": "680c7b94",
            "id": 2207,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getRepaymentAddress",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 2198,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "1737:8:16"
            },
            "parameters": {
              "id": 2197,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2196,
                  "mutability": "mutable",
                  "name": "tokenAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 2207,
                  "src": "1677:20:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2195,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1677:7:16",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1676:22:16"
            },
            "returnParameters": {
              "id": 2201,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2200,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2207,
                  "src": "1763:7:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2199,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1763:7:16",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1762:9:16"
            },
            "scope": 2414,
            "src": "1648:200:16",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              2124
            ],
            "body": {
              "id": 2244,
              "nodeType": "Block",
              "src": "1978:309:16",
              "statements": [
                {
                  "assignments": [
                    2216
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2216,
                      "mutability": "mutable",
                      "name": "core",
                      "nodeType": "VariableDeclaration",
                      "scope": 2244,
                      "src": "1988:12:16",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 2215,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "1988:7:16",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 2220,
                  "initialValue": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "id": 2217,
                        "name": "_lendingPoolAddressProvider",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2171,
                        "src": "2003:27:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ILendingPoolAddressesProvider_$2446",
                          "typeString": "contract ILendingPoolAddressesProvider"
                        }
                      },
                      "id": 2218,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "getLendingPoolCore",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2440,
                      "src": "2003:46:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$__$returns$_t_address_payable_$",
                        "typeString": "function () view external returns (address payable)"
                      }
                    },
                    "id": 2219,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2003:48:16",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1988:63:16"
                },
                {
                  "condition": {
                    "arguments": [
                      {
                        "id": 2222,
                        "name": "tokenAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2209,
                        "src": "2079:12:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 2221,
                      "name": "isRegistered",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2395,
                      "src": "2066:12:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                        "typeString": "function (address) view returns (bool)"
                      }
                    },
                    "id": 2223,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2066:26:16",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 2241,
                  "nodeType": "IfStatement",
                  "src": "2062:200:16",
                  "trueBody": {
                    "id": 2240,
                    "nodeType": "Block",
                    "src": "2094:168:16",
                    "statements": [
                      {
                        "expression": {
                          "condition": {
                            "commonType": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "id": 2229,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 2224,
                              "name": "tokenAddress",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2209,
                              "src": "2131:12:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "==",
                            "rightExpression": {
                              "arguments": [
                                {
                                  "hexValue": "31",
                                  "id": 2227,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "2155:1:16",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_1_by_1",
                                    "typeString": "int_const 1"
                                  },
                                  "value": "1"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_rational_1_by_1",
                                    "typeString": "int_const 1"
                                  }
                                ],
                                "id": 2226,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "2147:7:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 2225,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "2147:7:16",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 2228,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "2147:10:16",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            "src": "2131:26:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "falseExpression": {
                            "arguments": [
                              {
                                "id": 2236,
                                "name": "core",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2216,
                                "src": "2246:4:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 2233,
                                    "name": "tokenAddress",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2209,
                                    "src": "2222:12:16",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "id": 2232,
                                  "name": "IERC20",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6165,
                                  "src": "2215:6:16",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_IERC20_$6165_$",
                                    "typeString": "type(contract IERC20)"
                                  }
                                },
                                "id": 2234,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2215:20:16",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_IERC20_$6165",
                                  "typeString": "contract IERC20"
                                }
                              },
                              "id": 2235,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "balanceOf",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 6104,
                              "src": "2215:30:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                                "typeString": "function (address) view external returns (uint256)"
                              }
                            },
                            "id": 2237,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2215:36:16",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 2238,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "Conditional",
                          "src": "2131:120:16",
                          "trueExpression": {
                            "expression": {
                              "id": 2230,
                              "name": "core",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2216,
                              "src": "2180:4:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "id": 2231,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "balance",
                            "nodeType": "MemberAccess",
                            "src": "2180:12:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 2214,
                        "id": 2239,
                        "nodeType": "Return",
                        "src": "2108:143:16"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "hexValue": "30",
                    "id": 2242,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "2279:1:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_0_by_1",
                      "typeString": "int_const 0"
                    },
                    "value": "0"
                  },
                  "functionReturnParameters": 2214,
                  "id": 2243,
                  "nodeType": "Return",
                  "src": "2272:8:16"
                }
              ]
            },
            "functionSelector": "c32dc3b6",
            "id": 2245,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getTotalReserve",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 2211,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "1939:8:16"
            },
            "parameters": {
              "id": 2210,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2209,
                  "mutability": "mutable",
                  "name": "tokenAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 2245,
                  "src": "1879:20:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2208,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1879:7:16",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1878:22:16"
            },
            "returnParameters": {
              "id": 2214,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2213,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2245,
                  "src": "1965:7:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2212,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1965:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1964:9:16"
            },
            "scope": 2414,
            "src": "1854:433:16",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              2140
            ],
            "body": {
              "id": 2286,
              "nodeType": "Block",
              "src": "2441:364:16",
              "statements": [
                {
                  "assignments": [
                    2256
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2256,
                      "mutability": "mutable",
                      "name": "params",
                      "nodeType": "VariableDeclaration",
                      "scope": 2286,
                      "src": "2451:37:16",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ILendingPoolParametersProvider_$2466",
                        "typeString": "contract ILendingPoolParametersProvider"
                      },
                      "typeName": {
                        "id": 2255,
                        "name": "ILendingPoolParametersProvider",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 2466,
                        "src": "2451:30:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ILendingPoolParametersProvider_$2466",
                          "typeString": "contract ILendingPoolParametersProvider"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 2262,
                  "initialValue": {
                    "arguments": [
                      {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "id": 2258,
                            "name": "_lendingPoolAddressProvider",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2171,
                            "src": "2535:27:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ILendingPoolAddressesProvider_$2446",
                              "typeString": "contract ILendingPoolAddressesProvider"
                            }
                          },
                          "id": 2259,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "getLendingPoolParametersProvider",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 2445,
                          "src": "2535:60:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
                            "typeString": "function () view external returns (address)"
                          }
                        },
                        "id": 2260,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2535:62:16",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 2257,
                      "name": "ILendingPoolParametersProvider",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2466,
                      "src": "2491:30:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_ILendingPoolParametersProvider_$2466_$",
                        "typeString": "type(contract ILendingPoolParametersProvider)"
                      }
                    },
                    "id": 2261,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2491:116:16",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ILendingPoolParametersProvider_$2466",
                      "typeString": "contract ILendingPoolParametersProvider"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2451:156:16"
                },
                {
                  "assignments": [
                    2264,
                    2266
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2264,
                      "mutability": "mutable",
                      "name": "totalFeeBips",
                      "nodeType": "VariableDeclaration",
                      "scope": 2286,
                      "src": "2618:20:16",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2263,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "2618:7:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 2266,
                      "mutability": "mutable",
                      "name": "_",
                      "nodeType": "VariableDeclaration",
                      "scope": 2286,
                      "src": "2640:9:16",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2265,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "2640:7:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 2270,
                  "initialValue": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "id": 2267,
                        "name": "params",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2256,
                        "src": "2653:6:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ILendingPoolParametersProvider_$2466",
                          "typeString": "contract ILendingPoolParametersProvider"
                        }
                      },
                      "id": 2268,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "getFlashLoanFeesInBips",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2465,
                      "src": "2653:29:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_pure$__$returns$_t_uint256_$_t_uint256_$",
                        "typeString": "function () pure external returns (uint256,uint256)"
                      }
                    },
                    "id": 2269,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2653:31:16",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                      "typeString": "tuple(uint256,uint256)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2617:67:16"
                },
                {
                  "assignments": [
                    2272
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2272,
                      "mutability": "mutable",
                      "name": "amountFee",
                      "nodeType": "VariableDeclaration",
                      "scope": 2286,
                      "src": "2695:17:16",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2271,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "2695:7:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 2280,
                  "initialValue": {
                    "arguments": [
                      {
                        "hexValue": "3130303030",
                        "id": 2278,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2749:5:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_10000_by_1",
                          "typeString": "int_const 10000"
                        },
                        "value": "10000"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_rational_10000_by_1",
                          "typeString": "int_const 10000"
                        }
                      ],
                      "expression": {
                        "arguments": [
                          {
                            "id": 2275,
                            "name": "totalFeeBips",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2264,
                            "src": "2731:12:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "id": 2273,
                            "name": "tokenAmount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2249,
                            "src": "2715:11:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 2274,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "mul",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 5497,
                          "src": "2715:15:16",
                          "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": 2276,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2715:29:16",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 2277,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "div",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 5514,
                      "src": "2715:33:16",
                      "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": 2279,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2715:40:16",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2695:60:16"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 2283,
                        "name": "amountFee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2272,
                        "src": "2788:9:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 2281,
                        "name": "tokenAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2249,
                        "src": "2772:11:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 2282,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "add",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 5417,
                      "src": "2772:15:16",
                      "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": 2284,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2772:26:16",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 2254,
                  "id": 2285,
                  "nodeType": "Return",
                  "src": "2765:33:16"
                }
              ]
            },
            "functionSelector": "aa819057",
            "id": 2287,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getRepaymentAmount",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 2251,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "2402:8:16"
            },
            "parameters": {
              "id": 2250,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2247,
                  "mutability": "mutable",
                  "name": "tokenAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 2287,
                  "src": "2321:20:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2246,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2321:7:16",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2249,
                  "mutability": "mutable",
                  "name": "tokenAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 2287,
                  "src": "2343:19:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2248,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2343:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2320:43:16"
            },
            "returnParameters": {
              "id": 2254,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2253,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2287,
                  "src": "2428:7:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2252,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2428:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2427:9:16"
            },
            "scope": 2414,
            "src": "2293:512:16",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              2147
            ],
            "body": {
              "id": 2329,
              "nodeType": "Block",
              "src": "2908:372:16",
              "statements": [
                {
                  "expression": {
                    "id": 2298,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 2295,
                      "name": "_scheduleInvokerAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2173,
                      "src": "2918:23:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "expression": {
                        "id": 2296,
                        "name": "msg",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -15,
                        "src": "2944:3:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_message",
                          "typeString": "msg"
                        }
                      },
                      "id": 2297,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sender",
                      "nodeType": "MemberAccess",
                      "src": "2944:10:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "2918:36:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "id": 2299,
                  "nodeType": "ExpressionStatement",
                  "src": "2918:36:16"
                },
                {
                  "assignments": [
                    2301
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2301,
                      "mutability": "mutable",
                      "name": "lendingPool",
                      "nodeType": "VariableDeclaration",
                      "scope": 2329,
                      "src": "2965:24:16",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ILendingPool_$2428",
                        "typeString": "contract ILendingPool"
                      },
                      "typeName": {
                        "id": 2300,
                        "name": "ILendingPool",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 2428,
                        "src": "2965:12:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ILendingPool_$2428",
                          "typeString": "contract ILendingPool"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 2307,
                  "initialValue": {
                    "arguments": [
                      {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "id": 2303,
                            "name": "_lendingPoolAddressProvider",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2171,
                            "src": "3018:27:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ILendingPoolAddressesProvider_$2446",
                              "typeString": "contract ILendingPoolAddressesProvider"
                            }
                          },
                          "id": 2304,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "getLendingPool",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 2435,
                          "src": "3018:42:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
                            "typeString": "function () view external returns (address)"
                          }
                        },
                        "id": 2305,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3018:44:16",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 2302,
                      "name": "ILendingPool",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2428,
                      "src": "2992:12:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_ILendingPool_$2428_$",
                        "typeString": "type(contract ILendingPool)"
                      }
                    },
                    "id": 2306,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2992:80:16",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ILendingPool_$2428",
                      "typeString": "contract ILendingPool"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2965:107:16"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 2313,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -28,
                            "src": "3125:4:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_AaveLiquidityProxy_$2414",
                              "typeString": "contract AaveLiquidityProxy"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_AaveLiquidityProxy_$2414",
                              "typeString": "contract AaveLiquidityProxy"
                            }
                          ],
                          "id": 2312,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "3117:7:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 2311,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "3117:7:16",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 2314,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3117:13:16",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "id": 2316,
                            "name": "tokenAddress",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2289,
                            "src": "3162:12:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 2315,
                          "name": "remapTokenAddress",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2413,
                          "src": "3144:17:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_address_$",
                            "typeString": "function (address) view returns (address)"
                          }
                        },
                        "id": 2317,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3144:31:16",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 2318,
                        "name": "tokenAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2291,
                        "src": "3189:11:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "hexValue": "",
                        "id": 2319,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3214:2:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                          "typeString": "literal_string \"\""
                        },
                        "value": ""
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                          "typeString": "literal_string \"\""
                        }
                      ],
                      "expression": {
                        "id": 2308,
                        "name": "lendingPool",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2301,
                        "src": "3082:11:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ILendingPool_$2428",
                          "typeString": "contract ILendingPool"
                        }
                      },
                      "id": 2310,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "flashLoan",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2427,
                      "src": "3082:21:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$__$",
                        "typeString": "function (address,address,uint256,bytes memory) external"
                      }
                    },
                    "id": 2320,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3082:144:16",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2321,
                  "nodeType": "ExpressionStatement",
                  "src": "3082:144:16"
                },
                {
                  "expression": {
                    "id": 2327,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 2322,
                      "name": "_scheduleInvokerAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2173,
                      "src": "3237:23:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "hexValue": "30",
                          "id": 2325,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "3271:1:16",
                          "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": 2324,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "3263:7:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": {
                          "id": 2323,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3263:7:16",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 2326,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "3263:10:16",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "3237:36:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "id": 2328,
                  "nodeType": "ExpressionStatement",
                  "src": "3237:36:16"
                }
              ]
            },
            "functionSelector": "4b8a3529",
            "id": 2330,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "borrow",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 2293,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "2895:8:16"
            },
            "parameters": {
              "id": 2292,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2289,
                  "mutability": "mutable",
                  "name": "tokenAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 2330,
                  "src": "2827:20:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2288,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2827:7:16",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2291,
                  "mutability": "mutable",
                  "name": "tokenAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 2330,
                  "src": "2849:19:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2290,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2849:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2826:43:16"
            },
            "returnParameters": {
              "id": 2294,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2908:0:16"
            },
            "scope": 2414,
            "src": "2811:469:16",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 2371,
              "nodeType": "Block",
              "src": "3432:387:16",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        "id": 2347,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 2342,
                          "name": "_scheduleInvokerAddress",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2173,
                          "src": "3463:23:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 2345,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3498:1:16",
                              "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": 2344,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "3490:7:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 2343,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "3490:7:16",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 2346,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3490:10:16",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "3463:37:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "416176654c697175696469747950726f78793a206e6f74207363686564756c6564",
                        "id": 2348,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3514:35:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_091e25acad9e259ffcc1396277458253e424e2c1db6915b1743e2dd448819409",
                          "typeString": "literal_string \"AaveLiquidityProxy: not scheduled\""
                        },
                        "value": "AaveLiquidityProxy: not scheduled"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_091e25acad9e259ffcc1396277458253e424e2c1db6915b1743e2dd448819409",
                          "typeString": "literal_string \"AaveLiquidityProxy: not scheduled\""
                        }
                      ],
                      "id": 2341,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "3442:7:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 2349,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3442:117:16",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2350,
                  "nodeType": "ExpressionStatement",
                  "src": "3442:117:16"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 2353,
                            "name": "_reserve",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2332,
                            "src": "3600:8:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "id": 2354,
                            "name": "_scheduleInvokerAddress",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2173,
                            "src": "3610:23:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          {
                            "id": 2355,
                            "name": "_amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2334,
                            "src": "3635:7:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 2352,
                          "name": "transfer",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1433,
                          "src": "3591:8:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$",
                            "typeString": "function (address,address,uint256) returns (bool)"
                          }
                        },
                        "id": 2356,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3591:52:16",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "416176654c697175696469747950726f78793a207472616e7366657220746f20696e766f6b6572206661696c6564",
                        "id": 2357,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3657:48:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_6da286ebe7483edae25a8d452ac7373bfea0a2340ec783fb751f0810767d66e7",
                          "typeString": "literal_string \"AaveLiquidityProxy: transfer to invoker failed\""
                        },
                        "value": "AaveLiquidityProxy: transfer to invoker failed"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_6da286ebe7483edae25a8d452ac7373bfea0a2340ec783fb751f0810767d66e7",
                          "typeString": "literal_string \"AaveLiquidityProxy: transfer to invoker failed\""
                        }
                      ],
                      "id": 2351,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "3570:7:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 2358,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3570:145:16",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2359,
                  "nodeType": "ExpressionStatement",
                  "src": "3570:145:16"
                },
                {
                  "assignments": [
                    2361
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2361,
                      "mutability": "mutable",
                      "name": "invoker",
                      "nodeType": "VariableDeclaration",
                      "scope": 2371,
                      "src": "3726:16:16",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IInvoker_$1234",
                        "typeString": "contract IInvoker"
                      },
                      "typeName": {
                        "id": 2360,
                        "name": "IInvoker",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 1234,
                        "src": "3726:8:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IInvoker_$1234",
                          "typeString": "contract IInvoker"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 2365,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 2363,
                        "name": "_scheduleInvokerAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2173,
                        "src": "3754:23:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "id": 2362,
                      "name": "IInvoker",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1234,
                      "src": "3745:8:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_IInvoker_$1234_$",
                        "typeString": "type(contract IInvoker)"
                      }
                    },
                    "id": 2364,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3745:33:16",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IInvoker_$1234",
                      "typeString": "contract IInvoker"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3726:52:16"
                },
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "id": 2366,
                        "name": "invoker",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2361,
                        "src": "3788:7:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IInvoker_$1234",
                          "typeString": "contract IInvoker"
                        }
                      },
                      "id": 2368,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "invokeCallback",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1197,
                      "src": "3788:22:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$__$returns$__$",
                        "typeString": "function () external"
                      }
                    },
                    "id": 2369,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3788:24:16",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2370,
                  "nodeType": "ExpressionStatement",
                  "src": "3788:24:16"
                }
              ]
            },
            "functionSelector": "ee872558",
            "id": 2372,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "executeOperation",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2339,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2332,
                  "mutability": "mutable",
                  "name": "_reserve",
                  "nodeType": "VariableDeclaration",
                  "scope": 2372,
                  "src": "3321:16:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2331,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3321:7:16",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2334,
                  "mutability": "mutable",
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 2372,
                  "src": "3347:15:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2333,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3347:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2336,
                  "mutability": "mutable",
                  "name": "_fee",
                  "nodeType": "VariableDeclaration",
                  "scope": 2372,
                  "src": "3372:12:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2335,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3372:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2338,
                  "mutability": "mutable",
                  "name": "_params",
                  "nodeType": "VariableDeclaration",
                  "scope": 2372,
                  "src": "3394:22:16",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 2337,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "3394:5:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3311:111:16"
            },
            "returnParameters": {
              "id": 2340,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3432:0:16"
            },
            "scope": 2414,
            "src": "3286:533:16",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 2394,
              "nodeType": "Block",
              "src": "3898:202:16",
              "statements": [
                {
                  "assignments": [
                    2380
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2380,
                      "mutability": "mutable",
                      "name": "core",
                      "nodeType": "VariableDeclaration",
                      "scope": 2394,
                      "src": "3908:21:16",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ILendingPoolCore_$2456",
                        "typeString": "contract ILendingPoolCore"
                      },
                      "typeName": {
                        "id": 2379,
                        "name": "ILendingPoolCore",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 2456,
                        "src": "3908:16:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ILendingPoolCore_$2456",
                          "typeString": "contract ILendingPoolCore"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 2386,
                  "initialValue": {
                    "arguments": [
                      {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "id": 2382,
                            "name": "_lendingPoolAddressProvider",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2171,
                            "src": "3962:27:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ILendingPoolAddressesProvider_$2446",
                              "typeString": "contract ILendingPoolAddressesProvider"
                            }
                          },
                          "id": 2383,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "getLendingPoolCore",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 2440,
                          "src": "3962:46:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$__$returns$_t_address_payable_$",
                            "typeString": "function () view external returns (address payable)"
                          }
                        },
                        "id": 2384,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3962:48:16",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "id": 2381,
                      "name": "ILendingPoolCore",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2456,
                      "src": "3932:16:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_ILendingPoolCore_$2456_$",
                        "typeString": "type(contract ILendingPoolCore)"
                      }
                    },
                    "id": 2385,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3932:88:16",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ILendingPoolCore_$2456",
                      "typeString": "contract ILendingPoolCore"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3908:112:16"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 2390,
                            "name": "tokenAddress",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2374,
                            "src": "4079:12:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 2389,
                          "name": "remapTokenAddress",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2413,
                          "src": "4061:17:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_address_$",
                            "typeString": "function (address) view returns (address)"
                          }
                        },
                        "id": 2391,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4061:31:16",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 2387,
                        "name": "core",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2380,
                        "src": "4037:4:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ILendingPoolCore_$2456",
                          "typeString": "contract ILendingPoolCore"
                        }
                      },
                      "id": 2388,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "getReserveIsActive",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2455,
                      "src": "4037:23:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_bool_$",
                        "typeString": "function (address) view external returns (bool)"
                      }
                    },
                    "id": 2392,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4037:56:16",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 2378,
                  "id": 2393,
                  "nodeType": "Return",
                  "src": "4030:63:16"
                }
              ]
            },
            "id": 2395,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isRegistered",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2375,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2374,
                  "mutability": "mutable",
                  "name": "tokenAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 2395,
                  "src": "3847:20:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2373,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3847:7:16",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3846:22:16"
            },
            "returnParameters": {
              "id": 2378,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2377,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2395,
                  "src": "3892:4:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 2376,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "3892:4:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3891:6:16"
            },
            "scope": 2414,
            "src": "3825:275:16",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2412,
              "nodeType": "Block",
              "src": "4215:87:16",
              "statements": [
                {
                  "expression": {
                    "condition": {
                      "commonType": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "id": 2407,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 2402,
                        "name": "tokenAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2397,
                        "src": "4232:12:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "arguments": [
                          {
                            "hexValue": "31",
                            "id": 2405,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "4256:1:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            }
                          ],
                          "id": 2404,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "4248:7:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 2403,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "4248:7:16",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 2406,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4248:10:16",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      "src": "4232:26:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseExpression": {
                      "id": 2409,
                      "name": "tokenAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2397,
                      "src": "4283:12:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 2410,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "Conditional",
                    "src": "4232:63:16",
                    "trueExpression": {
                      "id": 2408,
                      "name": "ETHER_TOKEN_ADDRESS",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2169,
                      "src": "4261:19:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 2401,
                  "id": 2411,
                  "nodeType": "Return",
                  "src": "4225:70:16"
                }
              ]
            },
            "id": 2413,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "remapTokenAddress",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2398,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2397,
                  "mutability": "mutable",
                  "name": "tokenAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 2413,
                  "src": "4133:20:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2396,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4133:7:16",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4132:22:16"
            },
            "returnParameters": {
              "id": 2401,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2400,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2413,
                  "src": "4202:7:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2399,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4202:7:16",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4201:9:16"
            },
            "scope": 2414,
            "src": "4106:196:16",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          }
        ],
        "scope": 2415,
        "src": "1054:3250:16"
      }
    ],
    "src": "640:3665:16"
  },
  "legacyAST": {
    "attributes": {
      "absolutePath": "/Users/andrekorol/src/kollateral/protocol/contracts/liquidity/aave/AaveLiquidityProxy.sol",
      "exportedSymbols": {
        "AaveLiquidityProxy": [
          2414
        ],
        "BalanceCarrier": [
          1464
        ],
        "ExternalCaller": [
          1563
        ],
        "IERC20": [
          6165
        ],
        "IInvocationHook": [
          1170
        ],
        "IInvoker": [
          1234
        ],
        "ILendingPool": [
          2428
        ],
        "ILendingPoolAddressesProvider": [
          2446
        ],
        "ILendingPoolCore": [
          2456
        ],
        "ILendingPoolParametersProvider": [
          2466
        ],
        "ILiquidityProxy": [
          2148
        ],
        "SafeMath": [
          5584
        ]
      },
      "license": "Apache-2.0"
    },
    "children": [
      {
        "attributes": {
          "literals": [
            "solidity",
            "^",
            "0.7",
            ".0"
          ]
        },
        "id": 2150,
        "name": "PragmaDirective",
        "src": "640:23:16"
      },
      {
        "attributes": {
          "SourceUnit": 5585,
          "absolutePath": "@openzeppelin/contracts/math/SafeMath.sol",
          "file": "@openzeppelin/contracts/math/SafeMath.sol",
          "scope": 2415,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 2151,
        "name": "ImportDirective",
        "src": "665:51:16"
      },
      {
        "attributes": {
          "SourceUnit": 6166,
          "absolutePath": "@openzeppelin/contracts/token/ERC20/IERC20.sol",
          "file": "@openzeppelin/contracts/token/ERC20/IERC20.sol",
          "scope": 2415,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 2152,
        "name": "ImportDirective",
        "src": "717:56:16"
      },
      {
        "attributes": {
          "SourceUnit": 1465,
          "absolutePath": "/Users/andrekorol/src/kollateral/protocol/contracts/common/utils/BalanceCarrier.sol",
          "file": "../../common/utils/BalanceCarrier.sol",
          "scope": 2415,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 2153,
        "name": "ImportDirective",
        "src": "774:47:16"
      },
      {
        "attributes": {
          "SourceUnit": 1235,
          "absolutePath": "/Users/andrekorol/src/kollateral/protocol/contracts/common/invoke/IInvoker.sol",
          "file": "../../common/invoke/IInvoker.sol",
          "scope": 2415,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 2154,
        "name": "ImportDirective",
        "src": "822:42:16"
      },
      {
        "attributes": {
          "SourceUnit": 2149,
          "absolutePath": "/Users/andrekorol/src/kollateral/protocol/contracts/liquidity/ILiquidityProxy.sol",
          "file": "../ILiquidityProxy.sol",
          "scope": 2415,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 2155,
        "name": "ImportDirective",
        "src": "865:32:16"
      },
      {
        "attributes": {
          "SourceUnit": 2447,
          "absolutePath": "/Users/andrekorol/src/kollateral/protocol/contracts/liquidity/aave/ILendingPoolAddressesProvider.sol",
          "file": "./ILendingPoolAddressesProvider.sol",
          "scope": 2415,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 2156,
        "name": "ImportDirective",
        "src": "898:45:16"
      },
      {
        "attributes": {
          "SourceUnit": 2429,
          "absolutePath": "/Users/andrekorol/src/kollateral/protocol/contracts/liquidity/aave/ILendingPool.sol",
          "file": "./ILendingPool.sol",
          "scope": 2415,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 2157,
        "name": "ImportDirective",
        "src": "944:28:16"
      },
      {
        "attributes": {
          "SourceUnit": 2457,
          "absolutePath": "/Users/andrekorol/src/kollateral/protocol/contracts/liquidity/aave/ILendingPoolCore.sol",
          "file": "./ILendingPoolCore.sol",
          "scope": 2415,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 2158,
        "name": "ImportDirective",
        "src": "973:32:16"
      },
      {
        "attributes": {
          "SourceUnit": 2467,
          "absolutePath": "/Users/andrekorol/src/kollateral/protocol/contracts/liquidity/aave/ILendingPoolParametersProvider.sol",
          "file": "./ILendingPoolParametersProvider.sol",
          "scope": 2415,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 2159,
        "name": "ImportDirective",
        "src": "1006:46:16"
      },
      {
        "attributes": {
          "abstract": false,
          "contractDependencies": [
            1464,
            1563,
            2148
          ],
          "contractKind": "contract",
          "fullyImplemented": true,
          "linearizedBaseContracts": [
            2414,
            1464,
            1563,
            2148
          ],
          "name": "AaveLiquidityProxy",
          "scope": 2415
        },
        "children": [
          {
            "attributes": {},
            "children": [
              {
                "attributes": {
                  "name": "ILiquidityProxy",
                  "referencedDeclaration": 2148,
                  "type": "contract ILiquidityProxy"
                },
                "id": 2160,
                "name": "UserDefinedTypeName",
                "src": "1085:15:16"
              }
            ],
            "id": 2161,
            "name": "InheritanceSpecifier",
            "src": "1085:15:16"
          },
          {
            "attributes": {},
            "children": [
              {
                "attributes": {
                  "name": "BalanceCarrier",
                  "referencedDeclaration": 1464,
                  "type": "contract BalanceCarrier"
                },
                "id": 2162,
                "name": "UserDefinedTypeName",
                "src": "1102:14:16"
              }
            ],
            "id": 2163,
            "name": "InheritanceSpecifier",
            "src": "1102:14:16"
          },
          {
            "children": [
              {
                "attributes": {
                  "name": "SafeMath",
                  "referencedDeclaration": 5584,
                  "type": "library SafeMath"
                },
                "id": 2164,
                "name": "UserDefinedTypeName",
                "src": "1129:8:16"
              },
              {
                "attributes": {
                  "name": "uint256",
                  "type": "uint256"
                },
                "id": 2165,
                "name": "ElementaryTypeName",
                "src": "1142:7:16"
              }
            ],
            "id": 2166,
            "name": "UsingForDirective",
            "src": "1123:27:16"
          },
          {
            "attributes": {
              "constant": false,
              "mutability": "mutable",
              "name": "ETHER_TOKEN_ADDRESS",
              "scope": 2414,
              "stateVariable": true,
              "storageLocation": "default",
              "type": "address",
              "visibility": "internal"
            },
            "children": [
              {
                "attributes": {
                  "name": "address",
                  "stateMutability": "nonpayable",
                  "type": "address"
                },
                "id": 2167,
                "name": "ElementaryTypeName",
                "src": "1156:7:16"
              },
              {
                "attributes": {
                  "hexvalue": "307845656565654565656545654565654565456545656545454565656565456565656565656545456545",
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "lValueRequested": false,
                  "token": "number",
                  "type": "address payable",
                  "value": "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE"
                },
                "id": 2168,
                "name": "Literal",
                "src": "1203:42:16"
              }
            ],
            "id": 2169,
            "name": "VariableDeclaration",
            "src": "1156:89:16"
          },
          {
            "attributes": {
              "constant": false,
              "mutability": "mutable",
              "name": "_lendingPoolAddressProvider",
              "scope": 2414,
              "stateVariable": true,
              "storageLocation": "default",
              "type": "contract ILendingPoolAddressesProvider",
              "visibility": "internal"
            },
            "children": [
              {
                "attributes": {
                  "name": "ILendingPoolAddressesProvider",
                  "referencedDeclaration": 2446,
                  "type": "contract ILendingPoolAddressesProvider"
                },
                "id": 2170,
                "name": "UserDefinedTypeName",
                "src": "1252:29:16"
              }
            ],
            "id": 2171,
            "name": "VariableDeclaration",
            "src": "1252:66:16"
          },
          {
            "attributes": {
              "constant": false,
              "mutability": "mutable",
              "name": "_scheduleInvokerAddress",
              "scope": 2414,
              "stateVariable": true,
              "storageLocation": "default",
              "type": "address payable",
              "visibility": "internal"
            },
            "children": [
              {
                "attributes": {
                  "name": "address",
                  "stateMutability": "payable",
                  "type": "address payable"
                },
                "id": 2172,
                "name": "ElementaryTypeName",
                "src": "1325:15:16"
              }
            ],
            "id": 2173,
            "name": "VariableDeclaration",
            "src": "1325:48:16"
          },
          {
            "attributes": {
              "implemented": true,
              "isConstructor": true,
              "kind": "constructor",
              "name": "",
              "scope": 2414,
              "stateMutability": "nonpayable",
              "virtual": false,
              "visibility": "public"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "lendingPoolAddressProvider",
                      "scope": 2186,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "contract ILendingPoolAddressesProvider",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "ILendingPoolAddressesProvider",
                          "referencedDeclaration": 2446,
                          "type": "contract ILendingPoolAddressesProvider"
                        },
                        "id": 2174,
                        "name": "UserDefinedTypeName",
                        "src": "1392:29:16"
                      }
                    ],
                    "id": 2175,
                    "name": "VariableDeclaration",
                    "src": "1392:56:16"
                  }
                ],
                "id": 2176,
                "name": "ParameterList",
                "src": "1391:58:16"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 2180,
                "name": "ParameterList",
                "src": "1498:0:16"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 1464,
                      "type": "type(contract BalanceCarrier)",
                      "value": "BalanceCarrier"
                    },
                    "id": 2177,
                    "name": "Identifier",
                    "src": "1458:14:16"
                  },
                  {
                    "attributes": {
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 2169,
                      "type": "address",
                      "value": "ETHER_TOKEN_ADDRESS"
                    },
                    "id": 2178,
                    "name": "Identifier",
                    "src": "1473:19:16"
                  }
                ],
                "id": 2179,
                "name": "ModifierInvocation",
                "src": "1458:35:16"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "contract ILendingPoolAddressesProvider"
                        },
                        "children": [
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2171,
                              "type": "contract ILendingPoolAddressesProvider",
                              "value": "_lendingPoolAddressProvider"
                            },
                            "id": 2181,
                            "name": "Identifier",
                            "src": "1508:27:16"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2175,
                              "type": "contract ILendingPoolAddressesProvider",
                              "value": "lendingPoolAddressProvider"
                            },
                            "id": 2182,
                            "name": "Identifier",
                            "src": "1538:26:16"
                          }
                        ],
                        "id": 2183,
                        "name": "Assignment",
                        "src": "1508:56:16"
                      }
                    ],
                    "id": 2184,
                    "name": "ExpressionStatement",
                    "src": "1508:56:16"
                  }
                ],
                "id": 2185,
                "name": "Block",
                "src": "1498:73:16"
              }
            ],
            "id": 2186,
            "name": "FunctionDefinition",
            "src": "1380:191:16"
          },
          {
            "attributes": {
              "implemented": true,
              "isConstructor": false,
              "kind": "receive",
              "modifiers": [
                null
              ],
              "name": "",
              "scope": 2414,
              "stateMutability": "payable",
              "virtual": false,
              "visibility": "external"
            },
            "children": [
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 2187,
                "name": "ParameterList",
                "src": "1584:2:16"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 2188,
                "name": "ParameterList",
                "src": "1604:0:16"
              },
              {
                "attributes": {
                  "statements": [
                    null
                  ]
                },
                "children": [],
                "id": 2189,
                "name": "Block",
                "src": "1604:2:16"
              }
            ],
            "id": 2190,
            "name": "FunctionDefinition",
            "src": "1577:29:16"
          },
          {
            "attributes": {
              "implemented": true,
              "isConstructor": false,
              "kind": "fallback",
              "modifiers": [
                null
              ],
              "name": "",
              "scope": 2414,
              "stateMutability": "payable",
              "virtual": false,
              "visibility": "external"
            },
            "children": [
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 2191,
                "name": "ParameterList",
                "src": "1620:2:16"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 2192,
                "name": "ParameterList",
                "src": "1640:0:16"
              },
              {
                "attributes": {
                  "statements": [
                    null
                  ]
                },
                "children": [],
                "id": 2193,
                "name": "Block",
                "src": "1640:2:16"
              }
            ],
            "id": 2194,
            "name": "FunctionDefinition",
            "src": "1612:30:16"
          },
          {
            "attributes": {
              "baseFunctions": [
                2131
              ],
              "functionSelector": "680c7b94",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "getRepaymentAddress",
              "scope": 2414,
              "stateMutability": "view",
              "virtual": false,
              "visibility": "external"
            },
            "children": [
              {
                "attributes": {
                  "overrides": [
                    null
                  ]
                },
                "id": 2198,
                "name": "OverrideSpecifier",
                "src": "1737:8:16"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "tokenAddress",
                      "scope": 2207,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 2195,
                        "name": "ElementaryTypeName",
                        "src": "1677:7:16"
                      }
                    ],
                    "id": 2196,
                    "name": "VariableDeclaration",
                    "src": "1677:20:16"
                  }
                ],
                "id": 2197,
                "name": "ParameterList",
                "src": "1676:22:16"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "",
                      "scope": 2207,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 2199,
                        "name": "ElementaryTypeName",
                        "src": "1763:7:16"
                      }
                    ],
                    "id": 2200,
                    "name": "VariableDeclaration",
                    "src": "1763:7:16"
                  }
                ],
                "id": 2201,
                "name": "ParameterList",
                "src": "1762:9:16"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "functionReturnParameters": 2201
                    },
                    "children": [
                      {
                        "attributes": {
                          "arguments": [
                            null
                          ],
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "address payable",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                null
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "getLendingPoolCore",
                              "referencedDeclaration": 2440,
                              "type": "function () view external returns (address payable)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 2171,
                                  "type": "contract ILendingPoolAddressesProvider",
                                  "value": "_lendingPoolAddressProvider"
                                },
                                "id": 2202,
                                "name": "Identifier",
                                "src": "1793:27:16"
                              }
                            ],
                            "id": 2203,
                            "name": "MemberAccess",
                            "src": "1793:46:16"
                          }
                        ],
                        "id": 2204,
                        "name": "FunctionCall",
                        "src": "1793:48:16"
                      }
                    ],
                    "id": 2205,
                    "name": "Return",
                    "src": "1786:55:16"
                  }
                ],
                "id": 2206,
                "name": "Block",
                "src": "1776:72:16"
              }
            ],
            "id": 2207,
            "name": "FunctionDefinition",
            "src": "1648:200:16"
          },
          {
            "attributes": {
              "baseFunctions": [
                2124
              ],
              "functionSelector": "c32dc3b6",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "getTotalReserve",
              "scope": 2414,
              "stateMutability": "view",
              "virtual": false,
              "visibility": "external"
            },
            "children": [
              {
                "attributes": {
                  "overrides": [
                    null
                  ]
                },
                "id": 2211,
                "name": "OverrideSpecifier",
                "src": "1939:8:16"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "tokenAddress",
                      "scope": 2245,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 2208,
                        "name": "ElementaryTypeName",
                        "src": "1879:7:16"
                      }
                    ],
                    "id": 2209,
                    "name": "VariableDeclaration",
                    "src": "1879:20:16"
                  }
                ],
                "id": 2210,
                "name": "ParameterList",
                "src": "1878:22:16"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "",
                      "scope": 2245,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 2212,
                        "name": "ElementaryTypeName",
                        "src": "1965:7:16"
                      }
                    ],
                    "id": 2213,
                    "name": "VariableDeclaration",
                    "src": "1965:7:16"
                  }
                ],
                "id": 2214,
                "name": "ParameterList",
                "src": "1964:9:16"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "assignments": [
                        2216
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "core",
                          "scope": 2244,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "address",
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "address",
                              "stateMutability": "nonpayable",
                              "type": "address"
                            },
                            "id": 2215,
                            "name": "ElementaryTypeName",
                            "src": "1988:7:16"
                          }
                        ],
                        "id": 2216,
                        "name": "VariableDeclaration",
                        "src": "1988:12:16"
                      },
                      {
                        "attributes": {
                          "arguments": [
                            null
                          ],
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "address payable",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                null
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "getLendingPoolCore",
                              "referencedDeclaration": 2440,
                              "type": "function () view external returns (address payable)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 2171,
                                  "type": "contract ILendingPoolAddressesProvider",
                                  "value": "_lendingPoolAddressProvider"
                                },
                                "id": 2217,
                                "name": "Identifier",
                                "src": "2003:27:16"
                              }
                            ],
                            "id": 2218,
                            "name": "MemberAccess",
                            "src": "2003:46:16"
                          }
                        ],
                        "id": 2219,
                        "name": "FunctionCall",
                        "src": "2003:48:16"
                      }
                    ],
                    "id": 2220,
                    "name": "VariableDeclarationStatement",
                    "src": "1988:63:16"
                  },
                  {
                    "attributes": {},
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "bool",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2395,
                              "type": "function (address) view returns (bool)",
                              "value": "isRegistered"
                            },
                            "id": 2221,
                            "name": "Identifier",
                            "src": "2066:12:16"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2209,
                              "type": "address",
                              "value": "tokenAddress"
                            },
                            "id": 2222,
                            "name": "Identifier",
                            "src": "2079:12:16"
                          }
                        ],
                        "id": 2223,
                        "name": "FunctionCall",
                        "src": "2066:26:16"
                      },
                      {
                        "children": [
                          {
                            "attributes": {
                              "functionReturnParameters": 2214
                            },
                            "children": [
                              {
                                "attributes": {
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "commonType": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      },
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "operator": "==",
                                      "type": "bool"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 2209,
                                          "type": "address",
                                          "value": "tokenAddress"
                                        },
                                        "id": 2224,
                                        "name": "Identifier",
                                        "src": "2131:12:16"
                                      },
                                      {
                                        "attributes": {
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "isStructConstructorCall": false,
                                          "lValueRequested": false,
                                          "names": [
                                            null
                                          ],
                                          "tryCall": false,
                                          "type": "address payable",
                                          "type_conversion": true
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": [
                                                {
                                                  "typeIdentifier": "t_rational_1_by_1",
                                                  "typeString": "int_const 1"
                                                }
                                              ],
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "lValueRequested": false,
                                              "type": "type(address)"
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "name": "address"
                                                },
                                                "id": 2225,
                                                "name": "ElementaryTypeName",
                                                "src": "2147:7:16"
                                              }
                                            ],
                                            "id": 2226,
                                            "name": "ElementaryTypeNameExpression",
                                            "src": "2147:7:16"
                                          },
                                          {
                                            "attributes": {
                                              "hexvalue": "31",
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "lValueRequested": false,
                                              "token": "number",
                                              "type": "int_const 1",
                                              "value": "1"
                                            },
                                            "id": 2227,
                                            "name": "Literal",
                                            "src": "2155:1:16"
                                          }
                                        ],
                                        "id": 2228,
                                        "name": "FunctionCall",
                                        "src": "2147:10:16"
                                      }
                                    ],
                                    "id": 2229,
                                    "name": "BinaryOperation",
                                    "src": "2131:26:16"
                                  },
                                  {
                                    "attributes": {
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "balance",
                                      "type": "uint256"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 2216,
                                          "type": "address",
                                          "value": "core"
                                        },
                                        "id": 2230,
                                        "name": "Identifier",
                                        "src": "2180:4:16"
                                      }
                                    ],
                                    "id": 2231,
                                    "name": "MemberAccess",
                                    "src": "2180:12:16"
                                  },
                                  {
                                    "attributes": {
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "isStructConstructorCall": false,
                                      "lValueRequested": false,
                                      "names": [
                                        null
                                      ],
                                      "tryCall": false,
                                      "type": "uint256",
                                      "type_conversion": false
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            }
                                          ],
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "member_name": "balanceOf",
                                          "referencedDeclaration": 6104,
                                          "type": "function (address) view external returns (uint256)"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "isStructConstructorCall": false,
                                              "lValueRequested": false,
                                              "names": [
                                                null
                                              ],
                                              "tryCall": false,
                                              "type": "contract IERC20",
                                              "type_conversion": true
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "argumentTypes": [
                                                    {
                                                      "typeIdentifier": "t_address",
                                                      "typeString": "address"
                                                    }
                                                  ],
                                                  "overloadedDeclarations": [
                                                    null
                                                  ],
                                                  "referencedDeclaration": 6165,
                                                  "type": "type(contract IERC20)",
                                                  "value": "IERC20"
                                                },
                                                "id": 2232,
                                                "name": "Identifier",
                                                "src": "2215:6:16"
                                              },
                                              {
                                                "attributes": {
                                                  "overloadedDeclarations": [
                                                    null
                                                  ],
                                                  "referencedDeclaration": 2209,
                                                  "type": "address",
                                                  "value": "tokenAddress"
                                                },
                                                "id": 2233,
                                                "name": "Identifier",
                                                "src": "2222:12:16"
                                              }
                                            ],
                                            "id": 2234,
                                            "name": "FunctionCall",
                                            "src": "2215:20:16"
                                          }
                                        ],
                                        "id": 2235,
                                        "name": "MemberAccess",
                                        "src": "2215:30:16"
                                      },
                                      {
                                        "attributes": {
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 2216,
                                          "type": "address",
                                          "value": "core"
                                        },
                                        "id": 2236,
                                        "name": "Identifier",
                                        "src": "2246:4:16"
                                      }
                                    ],
                                    "id": 2237,
                                    "name": "FunctionCall",
                                    "src": "2215:36:16"
                                  }
                                ],
                                "id": 2238,
                                "name": "Conditional",
                                "src": "2131:120:16"
                              }
                            ],
                            "id": 2239,
                            "name": "Return",
                            "src": "2108:143:16"
                          }
                        ],
                        "id": 2240,
                        "name": "Block",
                        "src": "2094:168:16"
                      }
                    ],
                    "id": 2241,
                    "name": "IfStatement",
                    "src": "2062:200:16"
                  },
                  {
                    "attributes": {
                      "functionReturnParameters": 2214
                    },
                    "children": [
                      {
                        "attributes": {
                          "hexvalue": "30",
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "token": "number",
                          "type": "int_const 0",
                          "value": "0"
                        },
                        "id": 2242,
                        "name": "Literal",
                        "src": "2279:1:16"
                      }
                    ],
                    "id": 2243,
                    "name": "Return",
                    "src": "2272:8:16"
                  }
                ],
                "id": 2244,
                "name": "Block",
                "src": "1978:309:16"
              }
            ],
            "id": 2245,
            "name": "FunctionDefinition",
            "src": "1854:433:16"
          },
          {
            "attributes": {
              "baseFunctions": [
                2140
              ],
              "functionSelector": "aa819057",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "getRepaymentAmount",
              "scope": 2414,
              "stateMutability": "view",
              "virtual": false,
              "visibility": "external"
            },
            "children": [
              {
                "attributes": {
                  "overrides": [
                    null
                  ]
                },
                "id": 2251,
                "name": "OverrideSpecifier",
                "src": "2402:8:16"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "tokenAddress",
                      "scope": 2287,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 2246,
                        "name": "ElementaryTypeName",
                        "src": "2321:7:16"
                      }
                    ],
                    "id": 2247,
                    "name": "VariableDeclaration",
                    "src": "2321:20:16"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "tokenAmount",
                      "scope": 2287,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 2248,
                        "name": "ElementaryTypeName",
                        "src": "2343:7:16"
                      }
                    ],
                    "id": 2249,
                    "name": "VariableDeclaration",
                    "src": "2343:19:16"
                  }
                ],
                "id": 2250,
                "name": "ParameterList",
                "src": "2320:43:16"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "",
                      "scope": 2287,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 2252,
                        "name": "ElementaryTypeName",
                        "src": "2428:7:16"
                      }
                    ],
                    "id": 2253,
                    "name": "VariableDeclaration",
                    "src": "2428:7:16"
                  }
                ],
                "id": 2254,
                "name": "ParameterList",
                "src": "2427:9:16"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "assignments": [
                        2256
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "params",
                          "scope": 2286,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "contract ILendingPoolParametersProvider",
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "ILendingPoolParametersProvider",
                              "referencedDeclaration": 2466,
                              "type": "contract ILendingPoolParametersProvider"
                            },
                            "id": 2255,
                            "name": "UserDefinedTypeName",
                            "src": "2451:30:16"
                          }
                        ],
                        "id": 2256,
                        "name": "VariableDeclaration",
                        "src": "2451:37:16"
                      },
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "contract ILendingPoolParametersProvider",
                          "type_conversion": true
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2466,
                              "type": "type(contract ILendingPoolParametersProvider)",
                              "value": "ILendingPoolParametersProvider"
                            },
                            "id": 2257,
                            "name": "Identifier",
                            "src": "2491:30:16"
                          },
                          {
                            "attributes": {
                              "arguments": [
                                null
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "address",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    null
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "getLendingPoolParametersProvider",
                                  "referencedDeclaration": 2445,
                                  "type": "function () view external returns (address)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 2171,
                                      "type": "contract ILendingPoolAddressesProvider",
                                      "value": "_lendingPoolAddressProvider"
                                    },
                                    "id": 2258,
                                    "name": "Identifier",
                                    "src": "2535:27:16"
                                  }
                                ],
                                "id": 2259,
                                "name": "MemberAccess",
                                "src": "2535:60:16"
                              }
                            ],
                            "id": 2260,
                            "name": "FunctionCall",
                            "src": "2535:62:16"
                          }
                        ],
                        "id": 2261,
                        "name": "FunctionCall",
                        "src": "2491:116:16"
                      }
                    ],
                    "id": 2262,
                    "name": "VariableDeclarationStatement",
                    "src": "2451:156:16"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        2264,
                        2266
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "totalFeeBips",
                          "scope": 2286,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint256",
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint256",
                              "type": "uint256"
                            },
                            "id": 2263,
                            "name": "ElementaryTypeName",
                            "src": "2618:7:16"
                          }
                        ],
                        "id": 2264,
                        "name": "VariableDeclaration",
                        "src": "2618:20:16"
                      },
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "_",
                          "scope": 2286,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint256",
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint256",
                              "type": "uint256"
                            },
                            "id": 2265,
                            "name": "ElementaryTypeName",
                            "src": "2640:7:16"
                          }
                        ],
                        "id": 2266,
                        "name": "VariableDeclaration",
                        "src": "2640:9:16"
                      },
                      {
                        "attributes": {
                          "arguments": [
                            null
                          ],
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple(uint256,uint256)",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                null
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "getFlashLoanFeesInBips",
                              "referencedDeclaration": 2465,
                              "type": "function () pure external returns (uint256,uint256)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 2256,
                                  "type": "contract ILendingPoolParametersProvider",
                                  "value": "params"
                                },
                                "id": 2267,
                                "name": "Identifier",
                                "src": "2653:6:16"
                              }
                            ],
                            "id": 2268,
                            "name": "MemberAccess",
                            "src": "2653:29:16"
                          }
                        ],
                        "id": 2269,
                        "name": "FunctionCall",
                        "src": "2653:31:16"
                      }
                    ],
                    "id": 2270,
                    "name": "VariableDeclarationStatement",
                    "src": "2617:67:16"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        2272
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "amountFee",
                          "scope": 2286,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint256",
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint256",
                              "type": "uint256"
                            },
                            "id": 2271,
                            "name": "ElementaryTypeName",
                            "src": "2695:7:16"
                          }
                        ],
                        "id": 2272,
                        "name": "VariableDeclaration",
                        "src": "2695:17:16"
                      },
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "uint256",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_10000_by_1",
                                  "typeString": "int_const 10000"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "div",
                              "referencedDeclaration": 5514,
                              "type": "function (uint256,uint256) pure returns (uint256)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "tryCall": false,
                                  "type": "uint256",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "mul",
                                      "referencedDeclaration": 5497,
                                      "type": "function (uint256,uint256) pure returns (uint256)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 2249,
                                          "type": "uint256",
                                          "value": "tokenAmount"
                                        },
                                        "id": 2273,
                                        "name": "Identifier",
                                        "src": "2715:11:16"
                                      }
                                    ],
                                    "id": 2274,
                                    "name": "MemberAccess",
                                    "src": "2715:15:16"
                                  },
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 2264,
                                      "type": "uint256",
                                      "value": "totalFeeBips"
                                    },
                                    "id": 2275,
                                    "name": "Identifier",
                                    "src": "2731:12:16"
                                  }
                                ],
                                "id": 2276,
                                "name": "FunctionCall",
                                "src": "2715:29:16"
                              }
                            ],
                            "id": 2277,
                            "name": "MemberAccess",
                            "src": "2715:33:16"
                          },
                          {
                            "attributes": {
                              "hexvalue": "3130303030",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "token": "number",
                              "type": "int_const 10000",
                              "value": "10000"
                            },
                            "id": 2278,
                            "name": "Literal",
                            "src": "2749:5:16"
                          }
                        ],
                        "id": 2279,
                        "name": "FunctionCall",
                        "src": "2715:40:16"
                      }
                    ],
                    "id": 2280,
                    "name": "VariableDeclarationStatement",
                    "src": "2695:60:16"
                  },
                  {
                    "attributes": {
                      "functionReturnParameters": 2254
                    },
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "uint256",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "add",
                              "referencedDeclaration": 5417,
                              "type": "function (uint256,uint256) pure returns (uint256)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 2249,
                                  "type": "uint256",
                                  "value": "tokenAmount"
                                },
                                "id": 2281,
                                "name": "Identifier",
                                "src": "2772:11:16"
                              }
                            ],
                            "id": 2282,
                            "name": "MemberAccess",
                            "src": "2772:15:16"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2272,
                              "type": "uint256",
                              "value": "amountFee"
                            },
                            "id": 2283,
                            "name": "Identifier",
                            "src": "2788:9:16"
                          }
                        ],
                        "id": 2284,
                        "name": "FunctionCall",
                        "src": "2772:26:16"
                      }
                    ],
                    "id": 2285,
                    "name": "Return",
                    "src": "2765:33:16"
                  }
                ],
                "id": 2286,
                "name": "Block",
                "src": "2441:364:16"
              }
            ],
            "id": 2287,
            "name": "FunctionDefinition",
            "src": "2293:512:16"
          },
          {
            "attributes": {
              "baseFunctions": [
                2147
              ],
              "functionSelector": "4b8a3529",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "borrow",
              "scope": 2414,
              "stateMutability": "nonpayable",
              "virtual": false,
              "visibility": "external"
            },
            "children": [
              {
                "attributes": {
                  "overrides": [
                    null
                  ]
                },
                "id": 2293,
                "name": "OverrideSpecifier",
                "src": "2895:8:16"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "tokenAddress",
                      "scope": 2330,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 2288,
                        "name": "ElementaryTypeName",
                        "src": "2827:7:16"
                      }
                    ],
                    "id": 2289,
                    "name": "VariableDeclaration",
                    "src": "2827:20:16"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "tokenAmount",
                      "scope": 2330,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 2290,
                        "name": "ElementaryTypeName",
                        "src": "2849:7:16"
                      }
                    ],
                    "id": 2291,
                    "name": "VariableDeclaration",
                    "src": "2849:19:16"
                  }
                ],
                "id": 2292,
                "name": "ParameterList",
                "src": "2826:43:16"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 2294,
                "name": "ParameterList",
                "src": "2908:0:16"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "address payable"
                        },
                        "children": [
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2173,
                              "type": "address payable",
                              "value": "_scheduleInvokerAddress"
                            },
                            "id": 2295,
                            "name": "Identifier",
                            "src": "2918:23:16"
                          },
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "sender",
                              "type": "address payable"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": -15,
                                  "type": "msg",
                                  "value": "msg"
                                },
                                "id": 2296,
                                "name": "Identifier",
                                "src": "2944:3:16"
                              }
                            ],
                            "id": 2297,
                            "name": "MemberAccess",
                            "src": "2944:10:16"
                          }
                        ],
                        "id": 2298,
                        "name": "Assignment",
                        "src": "2918:36:16"
                      }
                    ],
                    "id": 2299,
                    "name": "ExpressionStatement",
                    "src": "2918:36:16"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        2301
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "lendingPool",
                          "scope": 2329,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "contract ILendingPool",
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "ILendingPool",
                              "referencedDeclaration": 2428,
                              "type": "contract ILendingPool"
                            },
                            "id": 2300,
                            "name": "UserDefinedTypeName",
                            "src": "2965:12:16"
                          }
                        ],
                        "id": 2301,
                        "name": "VariableDeclaration",
                        "src": "2965:24:16"
                      },
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "contract ILendingPool",
                          "type_conversion": true
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2428,
                              "type": "type(contract ILendingPool)",
                              "value": "ILendingPool"
                            },
                            "id": 2302,
                            "name": "Identifier",
                            "src": "2992:12:16"
                          },
                          {
                            "attributes": {
                              "arguments": [
                                null
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "address",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    null
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "getLendingPool",
                                  "referencedDeclaration": 2435,
                                  "type": "function () view external returns (address)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 2171,
                                      "type": "contract ILendingPoolAddressesProvider",
                                      "value": "_lendingPoolAddressProvider"
                                    },
                                    "id": 2303,
                                    "name": "Identifier",
                                    "src": "3018:27:16"
                                  }
                                ],
                                "id": 2304,
                                "name": "MemberAccess",
                                "src": "3018:42:16"
                              }
                            ],
                            "id": 2305,
                            "name": "FunctionCall",
                            "src": "3018:44:16"
                          }
                        ],
                        "id": 2306,
                        "name": "FunctionCall",
                        "src": "2992:80:16"
                      }
                    ],
                    "id": 2307,
                    "name": "VariableDeclarationStatement",
                    "src": "2965:107:16"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                                  "typeString": "literal_string \"\""
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "flashLoan",
                              "referencedDeclaration": 2427,
                              "type": "function (address,address,uint256,bytes memory) external"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 2301,
                                  "type": "contract ILendingPool",
                                  "value": "lendingPool"
                                },
                                "id": 2308,
                                "name": "Identifier",
                                "src": "3082:11:16"
                              }
                            ],
                            "id": 2310,
                            "name": "MemberAccess",
                            "src": "3082:21:16"
                          },
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "address payable",
                              "type_conversion": true
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_contract$_AaveLiquidityProxy_$2414",
                                      "typeString": "contract AaveLiquidityProxy"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "type": "type(address)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "name": "address"
                                    },
                                    "id": 2311,
                                    "name": "ElementaryTypeName",
                                    "src": "3117:7:16"
                                  }
                                ],
                                "id": 2312,
                                "name": "ElementaryTypeNameExpression",
                                "src": "3117:7:16"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": -28,
                                  "type": "contract AaveLiquidityProxy",
                                  "value": "this"
                                },
                                "id": 2313,
                                "name": "Identifier",
                                "src": "3125:4:16"
                              }
                            ],
                            "id": 2314,
                            "name": "FunctionCall",
                            "src": "3117:13:16"
                          },
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "address",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 2413,
                                  "type": "function (address) view returns (address)",
                                  "value": "remapTokenAddress"
                                },
                                "id": 2315,
                                "name": "Identifier",
                                "src": "3144:17:16"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 2289,
                                  "type": "address",
                                  "value": "tokenAddress"
                                },
                                "id": 2316,
                                "name": "Identifier",
                                "src": "3162:12:16"
                              }
                            ],
                            "id": 2317,
                            "name": "FunctionCall",
                            "src": "3144:31:16"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2291,
                              "type": "uint256",
                              "value": "tokenAmount"
                            },
                            "id": 2318,
                            "name": "Identifier",
                            "src": "3189:11:16"
                          },
                          {
                            "attributes": {
                              "hexvalue": "",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "token": "string",
                              "type": "literal_string \"\"",
                              "value": ""
                            },
                            "id": 2319,
                            "name": "Literal",
                            "src": "3214:2:16"
                          }
                        ],
                        "id": 2320,
                        "name": "FunctionCall",
                        "src": "3082:144:16"
                      }
                    ],
                    "id": 2321,
                    "name": "ExpressionStatement",
                    "src": "3082:144:16"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "address payable"
                        },
                        "children": [
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2173,
                              "type": "address payable",
                              "value": "_scheduleInvokerAddress"
                            },
                            "id": 2322,
                            "name": "Identifier",
                            "src": "3237:23:16"
                          },
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "address payable",
                              "type_conversion": true
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "type": "type(address)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "name": "address"
                                    },
                                    "id": 2323,
                                    "name": "ElementaryTypeName",
                                    "src": "3263:7:16"
                                  }
                                ],
                                "id": 2324,
                                "name": "ElementaryTypeNameExpression",
                                "src": "3263:7:16"
                              },
                              {
                                "attributes": {
                                  "hexvalue": "30",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "token": "number",
                                  "type": "int_const 0",
                                  "value": "0"
                                },
                                "id": 2325,
                                "name": "Literal",
                                "src": "3271:1:16"
                              }
                            ],
                            "id": 2326,
                            "name": "FunctionCall",
                            "src": "3263:10:16"
                          }
                        ],
                        "id": 2327,
                        "name": "Assignment",
                        "src": "3237:36:16"
                      }
                    ],
                    "id": 2328,
                    "name": "ExpressionStatement",
                    "src": "3237:36:16"
                  }
                ],
                "id": 2329,
                "name": "Block",
                "src": "2908:372:16"
              }
            ],
            "id": 2330,
            "name": "FunctionDefinition",
            "src": "2811:469:16"
          },
          {
            "attributes": {
              "functionSelector": "ee872558",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "executeOperation",
              "scope": 2414,
              "stateMutability": "nonpayable",
              "virtual": false,
              "visibility": "external"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "_reserve",
                      "scope": 2372,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 2331,
                        "name": "ElementaryTypeName",
                        "src": "3321:7:16"
                      }
                    ],
                    "id": 2332,
                    "name": "VariableDeclaration",
                    "src": "3321:16:16"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "_amount",
                      "scope": 2372,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 2333,
                        "name": "ElementaryTypeName",
                        "src": "3347:7:16"
                      }
                    ],
                    "id": 2334,
                    "name": "VariableDeclaration",
                    "src": "3347:15:16"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "_fee",
                      "scope": 2372,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 2335,
                        "name": "ElementaryTypeName",
                        "src": "3372:7:16"
                      }
                    ],
                    "id": 2336,
                    "name": "VariableDeclaration",
                    "src": "3372:12:16"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "_params",
                      "scope": 2372,
                      "stateVariable": false,
                      "storageLocation": "calldata",
                      "type": "bytes",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 2337,
                        "name": "ElementaryTypeName",
                        "src": "3394:5:16"
                      }
                    ],
                    "id": 2338,
                    "name": "VariableDeclaration",
                    "src": "3394:22:16"
                  }
                ],
                "id": 2339,
                "name": "ParameterList",
                "src": "3311:111:16"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 2340,
                "name": "ParameterList",
                "src": "3432:0:16"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_091e25acad9e259ffcc1396277458253e424e2c1db6915b1743e2dd448819409",
                                  "typeString": "literal_string \"AaveLiquidityProxy: not scheduled\""
                                }
                              ],
                              "overloadedDeclarations": [
                                -18,
                                -18
                              ],
                              "referencedDeclaration": -18,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 2341,
                            "name": "Identifier",
                            "src": "3442:7:16"
                          },
                          {
                            "attributes": {
                              "commonType": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "!=",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 2173,
                                  "type": "address payable",
                                  "value": "_scheduleInvokerAddress"
                                },
                                "id": 2342,
                                "name": "Identifier",
                                "src": "3463:23:16"
                              },
                              {
                                "attributes": {
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "tryCall": false,
                                  "type": "address payable",
                                  "type_conversion": true
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_rational_0_by_1",
                                          "typeString": "int_const 0"
                                        }
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "type": "type(address)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "name": "address"
                                        },
                                        "id": 2343,
                                        "name": "ElementaryTypeName",
                                        "src": "3490:7:16"
                                      }
                                    ],
                                    "id": 2344,
                                    "name": "ElementaryTypeNameExpression",
                                    "src": "3490:7:16"
                                  },
                                  {
                                    "attributes": {
                                      "hexvalue": "30",
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "token": "number",
                                      "type": "int_const 0",
                                      "value": "0"
                                    },
                                    "id": 2345,
                                    "name": "Literal",
                                    "src": "3498:1:16"
                                  }
                                ],
                                "id": 2346,
                                "name": "FunctionCall",
                                "src": "3490:10:16"
                              }
                            ],
                            "id": 2347,
                            "name": "BinaryOperation",
                            "src": "3463:37:16"
                          },
                          {
                            "attributes": {
                              "hexvalue": "416176654c697175696469747950726f78793a206e6f74207363686564756c6564",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "token": "string",
                              "type": "literal_string \"AaveLiquidityProxy: not scheduled\"",
                              "value": "AaveLiquidityProxy: not scheduled"
                            },
                            "id": 2348,
                            "name": "Literal",
                            "src": "3514:35:16"
                          }
                        ],
                        "id": 2349,
                        "name": "FunctionCall",
                        "src": "3442:117:16"
                      }
                    ],
                    "id": 2350,
                    "name": "ExpressionStatement",
                    "src": "3442:117:16"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_6da286ebe7483edae25a8d452ac7373bfea0a2340ec783fb751f0810767d66e7",
                                  "typeString": "literal_string \"AaveLiquidityProxy: transfer to invoker failed\""
                                }
                              ],
                              "overloadedDeclarations": [
                                -18,
                                -18
                              ],
                              "referencedDeclaration": -18,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 2351,
                            "name": "Identifier",
                            "src": "3570:7:16"
                          },
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "bool",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_address_payable",
                                      "typeString": "address payable"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1433,
                                  "type": "function (address,address,uint256) returns (bool)",
                                  "value": "transfer"
                                },
                                "id": 2352,
                                "name": "Identifier",
                                "src": "3591:8:16"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 2332,
                                  "type": "address",
                                  "value": "_reserve"
                                },
                                "id": 2353,
                                "name": "Identifier",
                                "src": "3600:8:16"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 2173,
                                  "type": "address payable",
                                  "value": "_scheduleInvokerAddress"
                                },
                                "id": 2354,
                                "name": "Identifier",
                                "src": "3610:23:16"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 2334,
                                  "type": "uint256",
                                  "value": "_amount"
                                },
                                "id": 2355,
                                "name": "Identifier",
                                "src": "3635:7:16"
                              }
                            ],
                            "id": 2356,
                            "name": "FunctionCall",
                            "src": "3591:52:16"
                          },
                          {
                            "attributes": {
                              "hexvalue": "416176654c697175696469747950726f78793a207472616e7366657220746f20696e766f6b6572206661696c6564",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "token": "string",
                              "type": "literal_string \"AaveLiquidityProxy: transfer to invoker failed\"",
                              "value": "AaveLiquidityProxy: transfer to invoker failed"
                            },
                            "id": 2357,
                            "name": "Literal",
                            "src": "3657:48:16"
                          }
                        ],
                        "id": 2358,
                        "name": "FunctionCall",
                        "src": "3570:145:16"
                      }
                    ],
                    "id": 2359,
                    "name": "ExpressionStatement",
                    "src": "3570:145:16"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        2361
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "invoker",
                          "scope": 2371,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "contract IInvoker",
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "IInvoker",
                              "referencedDeclaration": 1234,
                              "type": "contract IInvoker"
                            },
                            "id": 2360,
                            "name": "UserDefinedTypeName",
                            "src": "3726:8:16"
                          }
                        ],
                        "id": 2361,
                        "name": "VariableDeclaration",
                        "src": "3726:16:16"
                      },
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "contract IInvoker",
                          "type_conversion": true
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1234,
                              "type": "type(contract IInvoker)",
                              "value": "IInvoker"
                            },
                            "id": 2362,
                            "name": "Identifier",
                            "src": "3745:8:16"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2173,
                              "type": "address payable",
                              "value": "_scheduleInvokerAddress"
                            },
                            "id": 2363,
                            "name": "Identifier",
                            "src": "3754:23:16"
                          }
                        ],
                        "id": 2364,
                        "name": "FunctionCall",
                        "src": "3745:33:16"
                      }
                    ],
                    "id": 2365,
                    "name": "VariableDeclarationStatement",
                    "src": "3726:52:16"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "arguments": [
                            null
                          ],
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                null
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "invokeCallback",
                              "referencedDeclaration": 1197,
                              "type": "function () external"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 2361,
                                  "type": "contract IInvoker",
                                  "value": "invoker"
                                },
                                "id": 2366,
                                "name": "Identifier",
                                "src": "3788:7:16"
                              }
                            ],
                            "id": 2368,
                            "name": "MemberAccess",
                            "src": "3788:22:16"
                          }
                        ],
                        "id": 2369,
                        "name": "FunctionCall",
                        "src": "3788:24:16"
                      }
                    ],
                    "id": 2370,
                    "name": "ExpressionStatement",
                    "src": "3788:24:16"
                  }
                ],
                "id": 2371,
                "name": "Block",
                "src": "3432:387:16"
              }
            ],
            "id": 2372,
            "name": "FunctionDefinition",
            "src": "3286:533:16"
          },
          {
            "attributes": {
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "isRegistered",
              "scope": 2414,
              "stateMutability": "view",
              "virtual": false,
              "visibility": "internal"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "tokenAddress",
                      "scope": 2395,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 2373,
                        "name": "ElementaryTypeName",
                        "src": "3847:7:16"
                      }
                    ],
                    "id": 2374,
                    "name": "VariableDeclaration",
                    "src": "3847:20:16"
                  }
                ],
                "id": 2375,
                "name": "ParameterList",
                "src": "3846:22:16"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "",
                      "scope": 2395,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bool",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bool",
                          "type": "bool"
                        },
                        "id": 2376,
                        "name": "ElementaryTypeName",
                        "src": "3892:4:16"
                      }
                    ],
                    "id": 2377,
                    "name": "VariableDeclaration",
                    "src": "3892:4:16"
                  }
                ],
                "id": 2378,
                "name": "ParameterList",
                "src": "3891:6:16"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "assignments": [
                        2380
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "core",
                          "scope": 2394,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "contract ILendingPoolCore",
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "ILendingPoolCore",
                              "referencedDeclaration": 2456,
                              "type": "contract ILendingPoolCore"
                            },
                            "id": 2379,
                            "name": "UserDefinedTypeName",
                            "src": "3908:16:16"
                          }
                        ],
                        "id": 2380,
                        "name": "VariableDeclaration",
                        "src": "3908:21:16"
                      },
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "contract ILendingPoolCore",
                          "type_conversion": true
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2456,
                              "type": "type(contract ILendingPoolCore)",
                              "value": "ILendingPoolCore"
                            },
                            "id": 2381,
                            "name": "Identifier",
                            "src": "3932:16:16"
                          },
                          {
                            "attributes": {
                              "arguments": [
                                null
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "address payable",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    null
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "getLendingPoolCore",
                                  "referencedDeclaration": 2440,
                                  "type": "function () view external returns (address payable)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 2171,
                                      "type": "contract ILendingPoolAddressesProvider",
                                      "value": "_lendingPoolAddressProvider"
                                    },
                                    "id": 2382,
                                    "name": "Identifier",
                                    "src": "3962:27:16"
                                  }
                                ],
                                "id": 2383,
                                "name": "MemberAccess",
                                "src": "3962:46:16"
                              }
                            ],
                            "id": 2384,
                            "name": "FunctionCall",
                            "src": "3962:48:16"
                          }
                        ],
                        "id": 2385,
                        "name": "FunctionCall",
                        "src": "3932:88:16"
                      }
                    ],
                    "id": 2386,
                    "name": "VariableDeclarationStatement",
                    "src": "3908:112:16"
                  },
                  {
                    "attributes": {
                      "functionReturnParameters": 2378
                    },
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "bool",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "getReserveIsActive",
                              "referencedDeclaration": 2455,
                              "type": "function (address) view external returns (bool)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 2380,
                                  "type": "contract ILendingPoolCore",
                                  "value": "core"
                                },
                                "id": 2387,
                                "name": "Identifier",
                                "src": "4037:4:16"
                              }
                            ],
                            "id": 2388,
                            "name": "MemberAccess",
                            "src": "4037:23:16"
                          },
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "address",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 2413,
                                  "type": "function (address) view returns (address)",
                                  "value": "remapTokenAddress"
                                },
                                "id": 2389,
                                "name": "Identifier",
                                "src": "4061:17:16"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 2374,
                                  "type": "address",
                                  "value": "tokenAddress"
                                },
                                "id": 2390,
                                "name": "Identifier",
                                "src": "4079:12:16"
                              }
                            ],
                            "id": 2391,
                            "name": "FunctionCall",
                            "src": "4061:31:16"
                          }
                        ],
                        "id": 2392,
                        "name": "FunctionCall",
                        "src": "4037:56:16"
                      }
                    ],
                    "id": 2393,
                    "name": "Return",
                    "src": "4030:63:16"
                  }
                ],
                "id": 2394,
                "name": "Block",
                "src": "3898:202:16"
              }
            ],
            "id": 2395,
            "name": "FunctionDefinition",
            "src": "3825:275:16"
          },
          {
            "attributes": {
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "remapTokenAddress",
              "scope": 2414,
              "stateMutability": "view",
              "virtual": false,
              "visibility": "internal"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "tokenAddress",
                      "scope": 2413,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 2396,
                        "name": "ElementaryTypeName",
                        "src": "4133:7:16"
                      }
                    ],
                    "id": 2397,
                    "name": "VariableDeclaration",
                    "src": "4133:20:16"
                  }
                ],
                "id": 2398,
                "name": "ParameterList",
                "src": "4132:22:16"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "",
                      "scope": 2413,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 2399,
                        "name": "ElementaryTypeName",
                        "src": "4202:7:16"
                      }
                    ],
                    "id": 2400,
                    "name": "VariableDeclaration",
                    "src": "4202:7:16"
                  }
                ],
                "id": 2401,
                "name": "ParameterList",
                "src": "4201:9:16"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "functionReturnParameters": 2401
                    },
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "type": "address"
                        },
                        "children": [
                          {
                            "attributes": {
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "==",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 2397,
                                  "type": "address",
                                  "value": "tokenAddress"
                                },
                                "id": 2402,
                                "name": "Identifier",
                                "src": "4232:12:16"
                              },
                              {
                                "attributes": {
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "tryCall": false,
                                  "type": "address payable",
                                  "type_conversion": true
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_rational_1_by_1",
                                          "typeString": "int_const 1"
                                        }
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "type": "type(address)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "name": "address"
                                        },
                                        "id": 2403,
                                        "name": "ElementaryTypeName",
                                        "src": "4248:7:16"
                                      }
                                    ],
                                    "id": 2404,
                                    "name": "ElementaryTypeNameExpression",
                                    "src": "4248:7:16"
                                  },
                                  {
                                    "attributes": {
                                      "hexvalue": "31",
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "token": "number",
                                      "type": "int_const 1",
                                      "value": "1"
                                    },
                                    "id": 2405,
                                    "name": "Literal",
                                    "src": "4256:1:16"
                                  }
                                ],
                                "id": 2406,
                                "name": "FunctionCall",
                                "src": "4248:10:16"
                              }
                            ],
                            "id": 2407,
                            "name": "BinaryOperation",
                            "src": "4232:26:16"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2169,
                              "type": "address",
                              "value": "ETHER_TOKEN_ADDRESS"
                            },
                            "id": 2408,
                            "name": "Identifier",
                            "src": "4261:19:16"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2397,
                              "type": "address",
                              "value": "tokenAddress"
                            },
                            "id": 2409,
                            "name": "Identifier",
                            "src": "4283:12:16"
                          }
                        ],
                        "id": 2410,
                        "name": "Conditional",
                        "src": "4232:63:16"
                      }
                    ],
                    "id": 2411,
                    "name": "Return",
                    "src": "4225:70:16"
                  }
                ],
                "id": 2412,
                "name": "Block",
                "src": "4215:87:16"
              }
            ],
            "id": 2413,
            "name": "FunctionDefinition",
            "src": "4106:196:16"
          }
        ],
        "id": 2414,
        "name": "ContractDefinition",
        "src": "1054:3250:16"
      }
    ],
    "id": 2415,
    "name": "SourceUnit",
    "src": "640:3665:16"
  },
  "compiler": {
    "name": "solc",
    "version": "0.7.3+commit.9bfce1f6.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.3.3",
  "updatedAt": "2021-02-01T23:13:33.211Z",
  "devdoc": {
    "kind": "dev",
    "methods": {},
    "version": 1
  },
  "userdoc": {
    "kind": "user",
    "methods": {},
    "version": 1
  }
}