{
  "contractName": "KollateralLiquidityProxy",
  "abi": [
    {
      "inputs": [],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "stateMutability": "payable",
      "type": "fallback"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "stateMutability": "payable",
      "type": "receive"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "tokenAddress",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "kTokenAddress",
          "type": "address"
        }
      ],
      "name": "registerPool",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "tokenAddress",
          "type": "address"
        }
      ],
      "name": "deregisterPool",
      "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"
        }
      ],
      "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": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "execute",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.7.3+commit.9bfce1f6\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"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\":\"tokenAddress\",\"type\":\"address\"}],\"name\":\"deregisterPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"execute\",\"outputs\":[],\"stateMutability\":\"payable\",\"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\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"kTokenAddress\",\"type\":\"address\"}],\"name\":\"registerPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"/Users/andrekorol/src/kollateral/protocol/contracts/liquidity/kollateral/KollateralLiquidityProxy.sol\":\"KollateralLiquidityProxy\"},\"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/IInvokable.sol\":{\"keccak256\":\"0x372bca80a3e9d20439e9bf88cc026d6d1ec01556463e902511c67b6fc92e12d5\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://a5e6b5ef4246d03871bbd44b34e1212a9567d963f1b1e8e58e6273709442d4fb\",\"dweb:/ipfs/Qmb5Es45FLS4hhNGb9md3KU7L7hyMW7HHzumrVfsZZgxgC\"]},\"/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/ExtendedMath.sol\":{\"keccak256\":\"0x5ced249631b5dfe431f449d725d9f318b01ab0785306ca5e73cdf43760ab271a\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://3f3aef65abfcc02e451ad27a849caba0e6375abb26e28e7605928d19d561c3dd\",\"dweb:/ipfs/QmY5zMeH5x3QMS5xkxkY3DH4SDPWLGJyfPk1R8wPJXH9vr\"]},\"/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/ktoken/KToken.sol\":{\"keccak256\":\"0xc8c0d9869f316491406bc2d135d00682926f2a4b62fe1e3a6daf5b37515bbe8b\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://856af08828c3a5516a4018bdd2ed93eea5c02e60305bbc7e31fd8bd46446a97b\",\"dweb:/ipfs/QmVFroDk751zBN2fM6TiwCyhUinzGt2sRPwT3DUhnVgczU\"]},\"/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/kollateral/KollateralLiquidityProxy.sol\":{\"keccak256\":\"0x0cd14cde36fad2c1329df2fde762270252f486054b9363969211ffcd3a4a5cc2\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://02b82f6325ce1fc24bf46fddfe27292455c6f2dcbb566b02497dcb224dccd5fc\",\"dweb:/ipfs/QmZA9QoJGdqKTa6kc7nEArRhdhQNTYL7Hd2dfXhV1SSKhR\"]},\"/Users/andrekorol/src/kollateral/protocol/contracts/token/CollateralizedToken.sol\":{\"keccak256\":\"0xfaaaa4324c6cc78d9d1268426eb04fe41d8584ade05bbf22eac4875ecdf174d7\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://1e4149a0ecd14003c261b2243adfc19d7a009c83c32341ebdd6a8929c0bdd14d\",\"dweb:/ipfs/QmQbySda22WBU4oycYfrTye1RsJuz1Ub74ksoST7PeegHW\"]},\"/Users/andrekorol/src/kollateral/protocol/contracts/token/UnlimitedApprovalErc20.sol\":{\"keccak256\":\"0x407178fcd78f0a19d705e64aaaa26ae997d228f077f3cf6833f9f3eb31c72308\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://097906cbe6f8f35ba1763bd122d551ec302f45cf677021bbcdb8a55c706940d9\",\"dweb:/ipfs/QmVh7kcUWsXt3QApppB1njhGHfzdP813KSTUF6bh3VCmMM\"]},\"@openzeppelin/contracts/GSN/Context.sol\":{\"keccak256\":\"0x910a2e625b71168563edf9eeef55a50d6d699acfe27ceba3921f291829a8f938\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://248246ac66e6479dce1ad7d4945ec5540c98ceb09881e93c93f7c48d5772925c\",\"dweb:/ipfs/QmXr8tmUiZgEYid6ixeeBRmTdUnASWjKzhP3KRxMPy8fRt\"]},\"@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0x46d2453e9db55eae25c9abdae2c42229086c54f1a6a247e8ce32658bb785f6ae\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://198ef77ef5d9f7a7709d6bbfba1d4d54d82ccc15358e9dced37f1376dac887fa\",\"dweb:/ipfs/QmQHFvCA74s3AHU3NMn4AAYzFTt6UotWq7yk3WzLQs1oJS\"]},\"@openzeppelin/contracts/math/SafeMath.sol\":{\"keccak256\":\"0xba96bc371ba999f452985a98717cca1e4c4abb598dc038a9a9c3db08129b1ba4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://26e50e3f7b6482fb6f598f2e006994a74aa492687daa4b3eee7fd4fb5398ce7f\",\"dweb:/ipfs/QmZudqoPSkA4USLMFsBBmt19dDPZFS8aaAmL5R7pECXu6t\"]},\"@openzeppelin/contracts/token/ERC20/ERC20.sol\":{\"keccak256\":\"0x482b6d82ba1c9c73758ae15068a438361d4187b7a4e342db17ef0f828cb5e21a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://89725e56bc9c6cfb69521ceaa4a489561b928e930b71e30db85b24024c1c2c03\",\"dweb:/ipfs/QmNvpotZA1Fe48msV6TShSTVxeQ2dkaDS9MTKP4bNxyUG3\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xbd74f587ab9b9711801baf667db1426e4a03fd2d7f15af33e0e0d0394e7cef76\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2d0913dfbfce90d170df0d496ad7596c0778518e5fa7aba6c32562522546f66b\",\"dweb:/ipfs/QmR6B8nLj2PJf5e1JWD9Nk7ErkAwkqUwadCnvE82FJr1RU\"]},\"@openzeppelin/contracts/utils/Pausable.sol\":{\"keccak256\":\"0x2a245b797741f05f91212b1c2155a1b99a8884e6fd4c27953c4d3073732737f8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://76325ec3159cd859da98cab114513ec81095fa38e1412ffffb9b789bf14d6b38\",\"dweb:/ipfs/QmNdE2779u3DdRczjpx6RoevVa9kVJsCyEfnXWjkUw79jo\"]},\"@openzeppelin/contracts/utils/ReentrancyGuard.sol\":{\"keccak256\":\"0x1153f6dd334c01566417b8c551122450542a2b75a2bbb379d59a8c320ed6da28\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://002b4e5c26a2a069ba42486b83bf9c4b5461f3d5def32f9ef52b0aef8905d6d2\",\"dweb:/ipfs/QmPG44XDF4npiqRzzGvqJroDtUKfcR78wcreQ9bXa6guW6\"]}},\"version\":1}",
  "bytecode": "0x608060405234801561001057600080fd5b506001600061002361010860201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35080600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050610110565b600033905090565b6114b88061011f6000396000f3fe6080604052600436106100955760003560e01c80637e72c7d7116100595780637e72c7d7146102755780638da5cb5b146102c6578063aa81905714610307578063c32dc3b614610376578063f2fde38b146103db5761009c565b806309c5eabe1461009e5780634b8a352914610117578063680c7b9414610172578063715018a6146101ed5780637286e5e5146102045761009c565b3661009c57005b005b610115600480360360208110156100b457600080fd5b81019080803590602001906401000000008111156100d157600080fd5b8201836020820111156100e357600080fd5b8035906020019184600183028401116401000000008311171561010557600080fd5b909192939192939050505061042c565b005b34801561012357600080fd5b506101706004803603604081101561013a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610606565b005b34801561017e57600080fd5b506101c16004803603602081101561019557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506107ca565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156101f957600080fd5b506102026107dc565b005b34801561021057600080fd5b506102736004803603604081101561022757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610962565b005b34801561028157600080fd5b506102c46004803603602081101561029857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610aac565b005b3480156102d257600080fd5b506102db610bf6565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561031357600080fd5b506103606004803603604081101561032a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610c1f565b6040518082815260200191505060405180910390f35b34801561038257600080fd5b506103c56004803603602081101561039957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610cc2565b6040518082815260200191505060405180910390f35b3480156103e757600080fd5b5061042a600480360360208110156103fe57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610d84565b005b600073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156104d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018061145c6027913960400191505060405180910390fd5b610525600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600554610f8f565b61057a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260348152602001806114286034913960400191505060405180910390fd5b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff16630a5ca4e86040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156105e957600080fd5b505af11580156105fd573d6000803e3d6000fd5b50505050505050565b33600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600581905550600061069a836110b0565b90508073ffffffffffffffffffffffffffffffffffffffff16639e976db130846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff168152602001806020018381526020018281038252600081526020016020019350505050600060405180830381600087803b15801561072157600080fd5b505af1158015610735573d6000803e3d6000fd5b505050506000600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600581905550505050565b60006107d5826110b0565b9050919050565b6107e4611119565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146108a4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b61096a611119565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a2a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b610ab4611119565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b74576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600080610c2b846110b0565b90508073ffffffffffffffffffffffffffffffffffffffff1663b1197239846040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015610c7e57600080fd5b505afa158015610c92573d6000803e3d6000fd5b505050506040513d6020811015610ca857600080fd5b810190808051906020019092919050505091505092915050565b6000610ccd82611121565b8015610cdf5750610cdd82611162565b155b15610d7a576000610cef836110b0565b90508073ffffffffffffffffffffffffffffffffffffffff16634c68df676040518163ffffffff1660e01b815260040160206040518083038186803b158015610d3757600080fd5b505afa158015610d4b573d6000803e3d6000fd5b505050506040513d6020811015610d6157600080fd5b8101908080519060200190929190505050915050610d7f565b600090505b919050565b610d8c611119565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e4c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610ed2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806113d86026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415610ffa57610ff183836111f4565b600190506110a9565b8373ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561106b57600080fd5b505af115801561107f573d6000803e3d6000fd5b505050506040513d602081101561109557600080fd5b810190808051906020019092919050505090505b9392505050565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff16611143836110b0565b73ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600061116d826110b0565b73ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b815260040160206040518083038186803b1580156111b257600080fd5b505afa1580156111c6573d6000803e3d6000fd5b505050506040513d60208110156111dc57600080fd5b81019080805190602001909291905050509050919050565b8047101561124d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001806113fe602a913960400191505060405180910390fd5b61126782826040518060200160405280600081525061126b565b5050565b600060608473ffffffffffffffffffffffffffffffffffffffff1684846040518082805190602001908083835b602083106112bb5780518252602082019150602081019050602083039250611298565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d806000811461131d576040519150601f19603f3d011682016040523d82523d6000602084013e611322565b606091505b50915091508181906113cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611394578082015181840152602081019050611379565b50505050905090810190601f1680156113c15780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50505050505056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345787465726e616c43616c6c65723a20696e73756666696369656e742065746865722062616c616e63654b6f6c6c61746572616c4c697175696469747950726f78793a207472616e7366657220746f20696e766f6b6572206661696c65644b6f6c6c61746572616c4c697175696469747950726f78793a206e6f74207363686564756c6564a2646970667358221220cfdb2d6f5f3abc44fee9c48729e145d21c967d8aed4c62032fce185aa409b98164736f6c63430007030033",
  "deployedBytecode": "0x6080604052600436106100955760003560e01c80637e72c7d7116100595780637e72c7d7146102755780638da5cb5b146102c6578063aa81905714610307578063c32dc3b614610376578063f2fde38b146103db5761009c565b806309c5eabe1461009e5780634b8a352914610117578063680c7b9414610172578063715018a6146101ed5780637286e5e5146102045761009c565b3661009c57005b005b610115600480360360208110156100b457600080fd5b81019080803590602001906401000000008111156100d157600080fd5b8201836020820111156100e357600080fd5b8035906020019184600183028401116401000000008311171561010557600080fd5b909192939192939050505061042c565b005b34801561012357600080fd5b506101706004803603604081101561013a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610606565b005b34801561017e57600080fd5b506101c16004803603602081101561019557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506107ca565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156101f957600080fd5b506102026107dc565b005b34801561021057600080fd5b506102736004803603604081101561022757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610962565b005b34801561028157600080fd5b506102c46004803603602081101561029857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610aac565b005b3480156102d257600080fd5b506102db610bf6565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561031357600080fd5b506103606004803603604081101561032a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610c1f565b6040518082815260200191505060405180910390f35b34801561038257600080fd5b506103c56004803603602081101561039957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610cc2565b6040518082815260200191505060405180910390f35b3480156103e757600080fd5b5061042a600480360360208110156103fe57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610d84565b005b600073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156104d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018061145c6027913960400191505060405180910390fd5b610525600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600554610f8f565b61057a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260348152602001806114286034913960400191505060405180910390fd5b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff16630a5ca4e86040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156105e957600080fd5b505af11580156105fd573d6000803e3d6000fd5b50505050505050565b33600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600581905550600061069a836110b0565b90508073ffffffffffffffffffffffffffffffffffffffff16639e976db130846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff168152602001806020018381526020018281038252600081526020016020019350505050600060405180830381600087803b15801561072157600080fd5b505af1158015610735573d6000803e3d6000fd5b505050506000600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600581905550505050565b60006107d5826110b0565b9050919050565b6107e4611119565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146108a4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b61096a611119565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a2a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b610ab4611119565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b74576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600080610c2b846110b0565b90508073ffffffffffffffffffffffffffffffffffffffff1663b1197239846040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015610c7e57600080fd5b505afa158015610c92573d6000803e3d6000fd5b505050506040513d6020811015610ca857600080fd5b810190808051906020019092919050505091505092915050565b6000610ccd82611121565b8015610cdf5750610cdd82611162565b155b15610d7a576000610cef836110b0565b90508073ffffffffffffffffffffffffffffffffffffffff16634c68df676040518163ffffffff1660e01b815260040160206040518083038186803b158015610d3757600080fd5b505afa158015610d4b573d6000803e3d6000fd5b505050506040513d6020811015610d6157600080fd5b8101908080519060200190929190505050915050610d7f565b600090505b919050565b610d8c611119565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e4c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610ed2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806113d86026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415610ffa57610ff183836111f4565b600190506110a9565b8373ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561106b57600080fd5b505af115801561107f573d6000803e3d6000fd5b505050506040513d602081101561109557600080fd5b810190808051906020019092919050505090505b9392505050565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff16611143836110b0565b73ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600061116d826110b0565b73ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b815260040160206040518083038186803b1580156111b257600080fd5b505afa1580156111c6573d6000803e3d6000fd5b505050506040513d60208110156111dc57600080fd5b81019080805190602001909291905050509050919050565b8047101561124d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001806113fe602a913960400191505060405180910390fd5b61126782826040518060200160405280600081525061126b565b5050565b600060608473ffffffffffffffffffffffffffffffffffffffff1684846040518082805190602001908083835b602083106112bb5780518252602082019150602081019050602083039250611298565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d806000811461131d576040519150601f19603f3d011682016040523d82523d6000602084013e611322565b606091505b50915091508181906113cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611394578082015181840152602081019050611379565b50505050905090810190601f1680156113c15780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50505050505056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345787465726e616c43616c6c65723a20696e73756666696369656e742065746865722062616c616e63654b6f6c6c61746572616c4c697175696469747950726f78793a207472616e7366657220746f20696e766f6b6572206661696c65644b6f6c6c61746572616c4c697175696469747950726f78793a206e6f74207363686564756c6564a2646970667358221220cfdb2d6f5f3abc44fee9c48729e145d21c967d8aed4c62032fce185aa409b98164736f6c63430007030033",
  "immutableReferences": {},
  "generatedSources": [],
  "deployedGeneratedSources": [],
  "sourceMap": "976:3085:25:-:0;;;1293:43;;;;;;;;;;1330:1;865:17:39;885:12;:10;;;:12;;:::i;:::-;865:32;;916:9;907:6;;:18;;;;;;;;;;;;;;;;;;973:9;940:43;;969:1;940:43;;;;;;;;;;;;840:150;916:15:7;897:16;;:34;;;;;;;;;;;;;;;;;;850:88;976:3085:25;;590:104:38;643:15;677:10;670:17;;590:104;:::o;976:3085:25:-;;;;;;;",
  "deployedSourceMap": "976:3085:25:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3076:551;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;2594:476;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;1743:177;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;1689:145:39;;;;;;;;;;;;;:::i;:::-;;1413:181:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;1600:137;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;1066:77:39;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;2317:271:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1926:385;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1983:240:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;3076:551:25;3206:1;3171:37;;:23;;;;;;;;;;;:37;;;;3150:123;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3305:140;3331:21;;;;;;;;;;;3370:23;;;;;;;;;;;3411:20;;3305:8;:140::i;:::-;3284:239;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3534:16;3562:23;;;;;;;;;;;3534:52;;3596:7;:22;;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3076:551;;;:::o;2594:476::-;2727:10;2701:23;;:36;;;;;;;;;;;;;;;;;;2771:12;2747:21;;:36;;;;;;;;;;;;;;;;;;2816:11;2793:20;:34;;;;2838:11;2859:25;2871:12;2859:11;:25::i;:::-;2838:47;;2895:4;:11;;;2915:4;2926:11;2895:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2983:1;2949:23;;:36;;;;;;;;;;;;;;;;;;3027:1;2995:21;;:34;;;;;;;;;;;;;;;;;;3062:1;3039:20;:24;;;;2594:476;;;:::o;1743:177::-;1858:7;1888:25;1900:12;1888:11;:25::i;:::-;1881:32;;1743:177;;;:::o;1689:145:39:-;1280:12;:10;:12::i;:::-;1270:22;;:6;;;;;;;;;;:22;;;1262:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1795:1:::1;1758:40;;1779:6;::::0;::::1;;;;;;;;1758:40;;;;;;;;;;;;1825:1;1808:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;1689:145::o:0;1413:181:25:-;1280:12:39;:10;:12::i;:::-;1270:22;;:6;;;;;;;;;;:22;;;1262:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1574:13:25::1;1529:28;:42;1558:12;1529:42;;;;;;;;;;;;;;;;:58;;;;;;;;;;;;;;;;;;1413:181:::0;;:::o;1600:137::-;1280:12:39;:10;:12::i;:::-;1270:22;;:6;;;;;;;;;;:22;;;1262:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1728:1:25::1;1675:28;:42;1704:12;1675:42;;;;;;;;;;;;;;;;:55;;;;;;;;;;;;;;;;;;1600:137:::0;:::o;1066:77:39:-;1104:7;1130:6;;;;;;;;;;;1123:13;;1066:77;:::o;2317:271:25:-;2452:7;2475:11;2496:25;2508:12;2496:11;:25::i;:::-;2475:47;;2539:4;:29;;;2569:11;2539:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2532:49;;;2317:271;;;;:::o;1926:385::-;2037:7;2064:26;2077:12;2064;:26::i;:::-;:53;;;;;2095:22;2104:12;2095:8;:22::i;:::-;2094:23;2064:53;2060:227;;;2133:24;2197:25;2209:12;2197:11;:25::i;:::-;2133:103;;2257:4;:17;;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2250:26;;;;;2060:227;2303:1;2296:8;;1926:385;;;;:::o;1983:240:39:-;1280:12;:10;:12::i;:::-;1270:22;;:6;;;;;;;;;;:22;;;1262:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2091:1:::1;2071:22;;:8;:22;;;;2063:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2180:8;2151:38;;2172:6;::::0;::::1;;;;;;;;2151:38;;;;;;;;;;;;2208:8;2199:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;1983:240:::0;:::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;3633:141:25:-;3699:7;3725:28;:42;3754:12;3725:42;;;;;;;;;;;;;;;;;;;;;;;;;3718:49;;3633:141;;;:::o;590:104:38:-;643:15;677:10;670:17;;590:104;:::o;3780:136:25:-;3847:4;3907:1;3870:39;;:25;3882:12;3870:11;:25::i;:::-;:39;;;;3863:46;;3780:136;;;:::o;3922:137::-;3985:4;4017:25;4029:12;4017:11;:25::i;:::-;4008:42;;;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4001:51;;3922:137;;;:::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/access/Ownable.sol\";\nimport \"@openzeppelin/contracts/utils/Pausable.sol\";\nimport \"../ILiquidityProxy.sol\";\nimport \"../../token/CollateralizedToken.sol\";\nimport \"../../ktoken/KToken.sol\";\nimport \"../../common/invoke/IInvoker.sol\";\nimport \"../../common/utils/BalanceCarrier.sol\";\n\ncontract KollateralLiquidityProxy is\n    Ownable,\n    BalanceCarrier,\n    ILiquidityProxy,\n    IInvokable\n{\n    mapping(address => address) _tokenAddressToKTokenAddress;\n\n    address payable internal _scheduleInvokerAddress;\n    address internal _scheduleTokenAddress;\n    uint256 internal _scheduleTokenAmount;\n\n    constructor() BalanceCarrier(address(1)) {}\n\n    receive() external payable {}\n\n    fallback() external payable {}\n\n    function registerPool(address tokenAddress, address kTokenAddress)\n        external\n        onlyOwner\n    {\n        _tokenAddressToKTokenAddress[tokenAddress] = kTokenAddress;\n    }\n\n    function deregisterPool(address tokenAddress) external onlyOwner {\n        _tokenAddressToKTokenAddress[tokenAddress] = address(0);\n    }\n\n    function getRepaymentAddress(address tokenAddress)\n        external\n        view\n        override\n        returns (address)\n    {\n        return poolAddress(tokenAddress);\n    }\n\n    function getTotalReserve(address tokenAddress)\n        external\n        view\n        override\n        returns (uint256)\n    {\n        if (isRegistered(tokenAddress) && !isPaused(tokenAddress)) {\n            CollateralizedToken pool = CollateralizedToken(\n                poolAddress(tokenAddress)\n            );\n            return pool.totalReserve();\n        }\n        return 0;\n    }\n\n    function getRepaymentAmount(address tokenAddress, uint256 tokenAmount)\n        external\n        view\n        override\n        returns (uint256)\n    {\n        KToken pool = KToken(poolAddress(tokenAddress));\n        return pool.calculateRepaymentAmount(tokenAmount);\n    }\n\n    function borrow(address tokenAddress, uint256 tokenAmount)\n        external\n        override\n    {\n        _scheduleInvokerAddress = msg.sender;\n        _scheduleTokenAddress = tokenAddress;\n        _scheduleTokenAmount = tokenAmount;\n\n        KToken pool = KToken(poolAddress(tokenAddress));\n        pool.invoke(address(this), \"\", tokenAmount);\n\n        _scheduleInvokerAddress = address(0);\n        _scheduleTokenAddress = address(0);\n        _scheduleTokenAmount = 0;\n    }\n\n    function execute(bytes calldata data) external payable override {\n        require(\n            _scheduleInvokerAddress != address(0),\n            \"KollateralLiquidityProxy: not scheduled\"\n        );\n\n        require(\n            transfer(\n                _scheduleTokenAddress,\n                _scheduleInvokerAddress,\n                _scheduleTokenAmount\n            ),\n            \"KollateralLiquidityProxy: transfer to invoker failed\"\n        );\n\n        IInvoker invoker = IInvoker(_scheduleInvokerAddress);\n        invoker.invokeCallback();\n    }\n\n    function poolAddress(address tokenAddress) internal view returns (address) {\n        return _tokenAddressToKTokenAddress[tokenAddress];\n    }\n\n    function isRegistered(address tokenAddress) internal view returns (bool) {\n        return poolAddress(tokenAddress) != address(0);\n    }\n\n    function isPaused(address tokenAddress) internal view returns (bool) {\n        return Pausable(poolAddress(tokenAddress)).paused();\n    }\n}\n",
  "sourcePath": "/Users/andrekorol/src/kollateral/protocol/contracts/liquidity/kollateral/KollateralLiquidityProxy.sol",
  "ast": {
    "absolutePath": "/Users/andrekorol/src/kollateral/protocol/contracts/liquidity/kollateral/KollateralLiquidityProxy.sol",
    "exportedSymbols": {
      "BalanceCarrier": [
        1464
      ],
      "CollateralizedToken": [
        5197
      ],
      "Context": [
        5279
      ],
      "ERC20": [
        6087
      ],
      "ExtendedMath": [
        1506
      ],
      "ExternalCaller": [
        1563
      ],
      "IERC20": [
        6165
      ],
      "IInvocationHook": [
        1170
      ],
      "IInvokable": [
        1178
      ],
      "IInvoker": [
        1234
      ],
      "ILiquidityProxy": [
        2148
      ],
      "KToken": [
        2115
      ],
      "KollateralLiquidityProxy": [
        3516
      ],
      "Ownable": [
        5388
      ],
      "Pausable": [
        6255
      ],
      "ReentrancyGuard": [
        6295
      ],
      "SafeMath": [
        5584
      ],
      "UnlimitedApprovalErc20": [
        5256
      ]
    },
    "id": 3517,
    "license": "Apache-2.0",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 3228,
        "literals": [
          "solidity",
          "^",
          "0.7",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "640:23:25"
      },
      {
        "absolutePath": "@openzeppelin/contracts/access/Ownable.sol",
        "file": "@openzeppelin/contracts/access/Ownable.sol",
        "id": 3229,
        "nodeType": "ImportDirective",
        "scope": 3517,
        "sourceUnit": 5389,
        "src": "665:52:25",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@openzeppelin/contracts/utils/Pausable.sol",
        "file": "@openzeppelin/contracts/utils/Pausable.sol",
        "id": 3230,
        "nodeType": "ImportDirective",
        "scope": 3517,
        "sourceUnit": 6256,
        "src": "718:52:25",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/andrekorol/src/kollateral/protocol/contracts/liquidity/ILiquidityProxy.sol",
        "file": "../ILiquidityProxy.sol",
        "id": 3231,
        "nodeType": "ImportDirective",
        "scope": 3517,
        "sourceUnit": 2149,
        "src": "771:32:25",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/andrekorol/src/kollateral/protocol/contracts/token/CollateralizedToken.sol",
        "file": "../../token/CollateralizedToken.sol",
        "id": 3232,
        "nodeType": "ImportDirective",
        "scope": 3517,
        "sourceUnit": 5198,
        "src": "804:45:25",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/andrekorol/src/kollateral/protocol/contracts/ktoken/KToken.sol",
        "file": "../../ktoken/KToken.sol",
        "id": 3233,
        "nodeType": "ImportDirective",
        "scope": 3517,
        "sourceUnit": 2116,
        "src": "850:33:25",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/andrekorol/src/kollateral/protocol/contracts/common/invoke/IInvoker.sol",
        "file": "../../common/invoke/IInvoker.sol",
        "id": 3234,
        "nodeType": "ImportDirective",
        "scope": 3517,
        "sourceUnit": 1235,
        "src": "884:42:25",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/andrekorol/src/kollateral/protocol/contracts/common/utils/BalanceCarrier.sol",
        "file": "../../common/utils/BalanceCarrier.sol",
        "id": 3235,
        "nodeType": "ImportDirective",
        "scope": 3517,
        "sourceUnit": 1465,
        "src": "927:47:25",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "baseName": {
              "id": 3236,
              "name": "Ownable",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 5388,
              "src": "1017:7:25",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Ownable_$5388",
                "typeString": "contract Ownable"
              }
            },
            "id": 3237,
            "nodeType": "InheritanceSpecifier",
            "src": "1017:7:25"
          },
          {
            "baseName": {
              "id": 3238,
              "name": "BalanceCarrier",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 1464,
              "src": "1030:14:25",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_BalanceCarrier_$1464",
                "typeString": "contract BalanceCarrier"
              }
            },
            "id": 3239,
            "nodeType": "InheritanceSpecifier",
            "src": "1030:14:25"
          },
          {
            "baseName": {
              "id": 3240,
              "name": "ILiquidityProxy",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 2148,
              "src": "1050:15:25",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ILiquidityProxy_$2148",
                "typeString": "contract ILiquidityProxy"
              }
            },
            "id": 3241,
            "nodeType": "InheritanceSpecifier",
            "src": "1050:15:25"
          },
          {
            "baseName": {
              "id": 3242,
              "name": "IInvokable",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 1178,
              "src": "1071:10:25",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IInvokable_$1178",
                "typeString": "contract IInvokable"
              }
            },
            "id": 3243,
            "nodeType": "InheritanceSpecifier",
            "src": "1071:10:25"
          }
        ],
        "contractDependencies": [
          1178,
          1464,
          1563,
          2148,
          5279,
          5388
        ],
        "contractKind": "contract",
        "fullyImplemented": true,
        "id": 3516,
        "linearizedBaseContracts": [
          3516,
          1178,
          2148,
          1464,
          1563,
          5388,
          5279
        ],
        "name": "KollateralLiquidityProxy",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": false,
            "id": 3247,
            "mutability": "mutable",
            "name": "_tokenAddressToKTokenAddress",
            "nodeType": "VariableDeclaration",
            "scope": 3516,
            "src": "1088:56:25",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
              "typeString": "mapping(address => address)"
            },
            "typeName": {
              "id": 3246,
              "keyType": {
                "id": 3244,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "1096:7:25",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "1088:27:25",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                "typeString": "mapping(address => address)"
              },
              "valueType": {
                "id": 3245,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "1107:7:25",
                "stateMutability": "nonpayable",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              }
            },
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 3249,
            "mutability": "mutable",
            "name": "_scheduleInvokerAddress",
            "nodeType": "VariableDeclaration",
            "scope": 3516,
            "src": "1151:48:25",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address_payable",
              "typeString": "address payable"
            },
            "typeName": {
              "id": 3248,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "1151:15:25",
              "stateMutability": "payable",
              "typeDescriptions": {
                "typeIdentifier": "t_address_payable",
                "typeString": "address payable"
              }
            },
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 3251,
            "mutability": "mutable",
            "name": "_scheduleTokenAddress",
            "nodeType": "VariableDeclaration",
            "scope": 3516,
            "src": "1205:38:25",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 3250,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "1205:7:25",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 3253,
            "mutability": "mutable",
            "name": "_scheduleTokenAmount",
            "nodeType": "VariableDeclaration",
            "scope": 3516,
            "src": "1249:37:25",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 3252,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1249:7:25",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "visibility": "internal"
          },
          {
            "body": {
              "id": 3262,
              "nodeType": "Block",
              "src": "1334:2:25",
              "statements": []
            },
            "id": 3263,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [
              {
                "arguments": [
                  {
                    "arguments": [
                      {
                        "hexValue": "31",
                        "id": 3258,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1330:1:25",
                        "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": 3257,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "1322:7:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": {
                        "id": 3256,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "1322:7:25",
                        "typeDescriptions": {}
                      }
                    },
                    "id": 3259,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1322:10:25",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  }
                ],
                "id": 3260,
                "modifierName": {
                  "id": 3255,
                  "name": "BalanceCarrier",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1464,
                  "src": "1307:14:25",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_BalanceCarrier_$1464_$",
                    "typeString": "type(contract BalanceCarrier)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1307:26:25"
              }
            ],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3254,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1304:2:25"
            },
            "returnParameters": {
              "id": 3261,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1334:0:25"
            },
            "scope": 3516,
            "src": "1293:43:25",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 3266,
              "nodeType": "Block",
              "src": "1369:2:25",
              "statements": []
            },
            "id": 3267,
            "implemented": true,
            "kind": "receive",
            "modifiers": [],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3264,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1349:2:25"
            },
            "returnParameters": {
              "id": 3265,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1369:0:25"
            },
            "scope": 3516,
            "src": "1342:29:25",
            "stateMutability": "payable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 3270,
              "nodeType": "Block",
              "src": "1405:2:25",
              "statements": []
            },
            "id": 3271,
            "implemented": true,
            "kind": "fallback",
            "modifiers": [],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3268,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1385:2:25"
            },
            "returnParameters": {
              "id": 3269,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1405:0:25"
            },
            "scope": 3516,
            "src": "1377:30:25",
            "stateMutability": "payable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 3286,
              "nodeType": "Block",
              "src": "1519:75:25",
              "statements": [
                {
                  "expression": {
                    "id": 3284,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 3280,
                        "name": "_tokenAddressToKTokenAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3247,
                        "src": "1529:28:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                          "typeString": "mapping(address => address)"
                        }
                      },
                      "id": 3282,
                      "indexExpression": {
                        "id": 3281,
                        "name": "tokenAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3273,
                        "src": "1558:12:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "1529:42:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 3283,
                      "name": "kTokenAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3275,
                      "src": "1574:13:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "1529:58:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 3285,
                  "nodeType": "ExpressionStatement",
                  "src": "1529:58:25"
                }
              ]
            },
            "functionSelector": "7286e5e5",
            "id": 3287,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 3278,
                "modifierName": {
                  "id": 3277,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 5337,
                  "src": "1505:9:25",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1505:9:25"
              }
            ],
            "name": "registerPool",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3276,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3273,
                  "mutability": "mutable",
                  "name": "tokenAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 3287,
                  "src": "1435:20:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3272,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1435:7:25",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3275,
                  "mutability": "mutable",
                  "name": "kTokenAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 3287,
                  "src": "1457:21:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3274,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1457:7:25",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1434:45:25"
            },
            "returnParameters": {
              "id": 3279,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1519:0:25"
            },
            "scope": 3516,
            "src": "1413:181:25",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 3303,
              "nodeType": "Block",
              "src": "1665:72:25",
              "statements": [
                {
                  "expression": {
                    "id": 3301,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 3294,
                        "name": "_tokenAddressToKTokenAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3247,
                        "src": "1675:28:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                          "typeString": "mapping(address => address)"
                        }
                      },
                      "id": 3296,
                      "indexExpression": {
                        "id": 3295,
                        "name": "tokenAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3289,
                        "src": "1704:12:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "1675:42:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "hexValue": "30",
                          "id": 3299,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "1728:1:25",
                          "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": 3298,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "1720:7:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": {
                          "id": 3297,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1720:7:25",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 3300,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1720:10:25",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "1675:55:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 3302,
                  "nodeType": "ExpressionStatement",
                  "src": "1675:55:25"
                }
              ]
            },
            "functionSelector": "7e72c7d7",
            "id": 3304,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 3292,
                "modifierName": {
                  "id": 3291,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 5337,
                  "src": "1655:9:25",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1655:9:25"
              }
            ],
            "name": "deregisterPool",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3290,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3289,
                  "mutability": "mutable",
                  "name": "tokenAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 3304,
                  "src": "1624:20:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3288,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1624:7:25",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1623:22:25"
            },
            "returnParameters": {
              "id": 3293,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1665:0:25"
            },
            "scope": 3516,
            "src": "1600:137:25",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              2131
            ],
            "body": {
              "id": 3316,
              "nodeType": "Block",
              "src": "1871:49:25",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 3313,
                        "name": "tokenAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3306,
                        "src": "1900:12:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 3312,
                      "name": "poolAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3482,
                      "src": "1888:11:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_address_$",
                        "typeString": "function (address) view returns (address)"
                      }
                    },
                    "id": 3314,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1888:25:25",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 3311,
                  "id": 3315,
                  "nodeType": "Return",
                  "src": "1881:32:25"
                }
              ]
            },
            "functionSelector": "680c7b94",
            "id": 3317,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getRepaymentAddress",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 3308,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "1832:8:25"
            },
            "parameters": {
              "id": 3307,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3306,
                  "mutability": "mutable",
                  "name": "tokenAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 3317,
                  "src": "1772:20:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3305,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1772:7:25",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1771:22:25"
            },
            "returnParameters": {
              "id": 3311,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3310,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 3317,
                  "src": "1858:7:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3309,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1858:7:25",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1857:9:25"
            },
            "scope": 3516,
            "src": "1743:177:25",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              2124
            ],
            "body": {
              "id": 3349,
              "nodeType": "Block",
              "src": "2050:261:25",
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 3332,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "arguments": [
                        {
                          "id": 3326,
                          "name": "tokenAddress",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3319,
                          "src": "2077:12:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 3325,
                        "name": "isRegistered",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3499,
                        "src": "2064:12:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                          "typeString": "function (address) view returns (bool)"
                        }
                      },
                      "id": 3327,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2064:26:25",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "id": 3331,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "!",
                      "prefix": true,
                      "src": "2094:23:25",
                      "subExpression": {
                        "arguments": [
                          {
                            "id": 3329,
                            "name": "tokenAddress",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3319,
                            "src": "2104:12:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 3328,
                          "name": "isPaused",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3515,
                          "src": "2095:8:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                            "typeString": "function (address) view returns (bool)"
                          }
                        },
                        "id": 3330,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2095:22:25",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "2064:53:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 3346,
                  "nodeType": "IfStatement",
                  "src": "2060:227:25",
                  "trueBody": {
                    "id": 3345,
                    "nodeType": "Block",
                    "src": "2119:168:25",
                    "statements": [
                      {
                        "assignments": [
                          3334
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 3334,
                            "mutability": "mutable",
                            "name": "pool",
                            "nodeType": "VariableDeclaration",
                            "scope": 3345,
                            "src": "2133:24:25",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_CollateralizedToken_$5197",
                              "typeString": "contract CollateralizedToken"
                            },
                            "typeName": {
                              "id": 3333,
                              "name": "CollateralizedToken",
                              "nodeType": "UserDefinedTypeName",
                              "referencedDeclaration": 5197,
                              "src": "2133:19:25",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_CollateralizedToken_$5197",
                                "typeString": "contract CollateralizedToken"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 3340,
                        "initialValue": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 3337,
                                  "name": "tokenAddress",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3319,
                                  "src": "2209:12:25",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 3336,
                                "name": "poolAddress",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3482,
                                "src": "2197:11:25",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_address_$",
                                  "typeString": "function (address) view returns (address)"
                                }
                              },
                              "id": 3338,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "2197:25:25",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 3335,
                            "name": "CollateralizedToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5197,
                            "src": "2160:19:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_CollateralizedToken_$5197_$",
                              "typeString": "type(contract CollateralizedToken)"
                            }
                          },
                          "id": 3339,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2160:76:25",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_CollateralizedToken_$5197",
                            "typeString": "contract CollateralizedToken"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "2133:103:25"
                      },
                      {
                        "expression": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "id": 3341,
                              "name": "pool",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3334,
                              "src": "2257:4:25",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_CollateralizedToken_$5197",
                                "typeString": "contract CollateralizedToken"
                              }
                            },
                            "id": 3342,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "totalReserve",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 5174,
                            "src": "2257:17:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$",
                              "typeString": "function () view external returns (uint256)"
                            }
                          },
                          "id": 3343,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2257:19:25",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 3324,
                        "id": 3344,
                        "nodeType": "Return",
                        "src": "2250:26:25"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "hexValue": "30",
                    "id": 3347,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "2303:1:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_0_by_1",
                      "typeString": "int_const 0"
                    },
                    "value": "0"
                  },
                  "functionReturnParameters": 3324,
                  "id": 3348,
                  "nodeType": "Return",
                  "src": "2296:8:25"
                }
              ]
            },
            "functionSelector": "c32dc3b6",
            "id": 3350,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getTotalReserve",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 3321,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "2011:8:25"
            },
            "parameters": {
              "id": 3320,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3319,
                  "mutability": "mutable",
                  "name": "tokenAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 3350,
                  "src": "1951:20:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3318,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1951:7:25",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1950:22:25"
            },
            "returnParameters": {
              "id": 3324,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3323,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 3350,
                  "src": "2037:7:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3322,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2037:7:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2036:9:25"
            },
            "scope": 3516,
            "src": "1926:385:25",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              2140
            ],
            "body": {
              "id": 3373,
              "nodeType": "Block",
              "src": "2465:123:25",
              "statements": [
                {
                  "assignments": [
                    3361
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3361,
                      "mutability": "mutable",
                      "name": "pool",
                      "nodeType": "VariableDeclaration",
                      "scope": 3373,
                      "src": "2475:11:25",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_KToken_$2115",
                        "typeString": "contract KToken"
                      },
                      "typeName": {
                        "id": 3360,
                        "name": "KToken",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 2115,
                        "src": "2475:6:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_KToken_$2115",
                          "typeString": "contract KToken"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 3367,
                  "initialValue": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 3364,
                            "name": "tokenAddress",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3352,
                            "src": "2508:12:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 3363,
                          "name": "poolAddress",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3482,
                          "src": "2496:11:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_address_$",
                            "typeString": "function (address) view returns (address)"
                          }
                        },
                        "id": 3365,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2496:25:25",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 3362,
                      "name": "KToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2115,
                      "src": "2489:6:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_KToken_$2115_$",
                        "typeString": "type(contract KToken)"
                      }
                    },
                    "id": 3366,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2489:33:25",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_KToken_$2115",
                      "typeString": "contract KToken"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2475:47:25"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 3370,
                        "name": "tokenAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3354,
                        "src": "2569:11:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 3368,
                        "name": "pool",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3361,
                        "src": "2539:4:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_KToken_$2115",
                          "typeString": "contract KToken"
                        }
                      },
                      "id": 3369,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "calculateRepaymentAmount",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1984,
                      "src": "2539:29:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256) view external returns (uint256)"
                      }
                    },
                    "id": 3371,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2539:42:25",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 3359,
                  "id": 3372,
                  "nodeType": "Return",
                  "src": "2532:49:25"
                }
              ]
            },
            "functionSelector": "aa819057",
            "id": 3374,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getRepaymentAmount",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 3356,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "2426:8:25"
            },
            "parameters": {
              "id": 3355,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3352,
                  "mutability": "mutable",
                  "name": "tokenAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 3374,
                  "src": "2345:20:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3351,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2345:7:25",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3354,
                  "mutability": "mutable",
                  "name": "tokenAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 3374,
                  "src": "2367:19:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3353,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2367:7:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2344:43:25"
            },
            "returnParameters": {
              "id": 3359,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3358,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 3374,
                  "src": "2452:7:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3357,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2452:7:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2451:9:25"
            },
            "scope": 3516,
            "src": "2317:271:25",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              2147
            ],
            "body": {
              "id": 3432,
              "nodeType": "Block",
              "src": "2691:379:25",
              "statements": [
                {
                  "expression": {
                    "id": 3385,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 3382,
                      "name": "_scheduleInvokerAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3249,
                      "src": "2701:23:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "expression": {
                        "id": 3383,
                        "name": "msg",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -15,
                        "src": "2727:3:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_message",
                          "typeString": "msg"
                        }
                      },
                      "id": 3384,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sender",
                      "nodeType": "MemberAccess",
                      "src": "2727:10:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "2701:36:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "id": 3386,
                  "nodeType": "ExpressionStatement",
                  "src": "2701:36:25"
                },
                {
                  "expression": {
                    "id": 3389,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 3387,
                      "name": "_scheduleTokenAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3251,
                      "src": "2747:21:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 3388,
                      "name": "tokenAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3376,
                      "src": "2771:12:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "2747:36:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 3390,
                  "nodeType": "ExpressionStatement",
                  "src": "2747:36:25"
                },
                {
                  "expression": {
                    "id": 3393,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 3391,
                      "name": "_scheduleTokenAmount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3253,
                      "src": "2793:20:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 3392,
                      "name": "tokenAmount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3378,
                      "src": "2816:11:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2793:34:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 3394,
                  "nodeType": "ExpressionStatement",
                  "src": "2793:34:25"
                },
                {
                  "assignments": [
                    3396
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3396,
                      "mutability": "mutable",
                      "name": "pool",
                      "nodeType": "VariableDeclaration",
                      "scope": 3432,
                      "src": "2838:11:25",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_KToken_$2115",
                        "typeString": "contract KToken"
                      },
                      "typeName": {
                        "id": 3395,
                        "name": "KToken",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 2115,
                        "src": "2838:6:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_KToken_$2115",
                          "typeString": "contract KToken"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 3402,
                  "initialValue": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 3399,
                            "name": "tokenAddress",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3376,
                            "src": "2871:12:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 3398,
                          "name": "poolAddress",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3482,
                          "src": "2859:11:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_address_$",
                            "typeString": "function (address) view returns (address)"
                          }
                        },
                        "id": 3400,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2859:25:25",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 3397,
                      "name": "KToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2115,
                      "src": "2852:6:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_KToken_$2115_$",
                        "typeString": "type(contract KToken)"
                      }
                    },
                    "id": 3401,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2852:33:25",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_KToken_$2115",
                      "typeString": "contract KToken"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2838:47:25"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 3408,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -28,
                            "src": "2915:4:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_KollateralLiquidityProxy_$3516",
                              "typeString": "contract KollateralLiquidityProxy"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_KollateralLiquidityProxy_$3516",
                              "typeString": "contract KollateralLiquidityProxy"
                            }
                          ],
                          "id": 3407,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "2907:7:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 3406,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "2907:7:25",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 3409,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2907:13:25",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "hexValue": "",
                        "id": 3410,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2922:2:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                          "typeString": "literal_string \"\""
                        },
                        "value": ""
                      },
                      {
                        "id": 3411,
                        "name": "tokenAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3378,
                        "src": "2926:11:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                          "typeString": "literal_string \"\""
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 3403,
                        "name": "pool",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3396,
                        "src": "2895:4:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_KToken_$2115",
                          "typeString": "contract KToken"
                        }
                      },
                      "id": 3405,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "invoke",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1880,
                      "src": "2895:11:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_payable$_t_address_$_t_bytes_memory_ptr_$_t_uint256_$returns$__$",
                        "typeString": "function (address,bytes memory,uint256) payable external"
                      }
                    },
                    "id": 3412,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2895:43:25",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3413,
                  "nodeType": "ExpressionStatement",
                  "src": "2895:43:25"
                },
                {
                  "expression": {
                    "id": 3419,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 3414,
                      "name": "_scheduleInvokerAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3249,
                      "src": "2949:23:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "hexValue": "30",
                          "id": 3417,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "2983:1:25",
                          "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": 3416,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "2975:7:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": {
                          "id": 3415,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2975:7:25",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 3418,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2975:10:25",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "2949:36:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "id": 3420,
                  "nodeType": "ExpressionStatement",
                  "src": "2949:36:25"
                },
                {
                  "expression": {
                    "id": 3426,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 3421,
                      "name": "_scheduleTokenAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3251,
                      "src": "2995:21:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "hexValue": "30",
                          "id": 3424,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "3027:1:25",
                          "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": 3423,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "3019:7:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": {
                          "id": 3422,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3019:7:25",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 3425,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "3019:10:25",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "2995:34:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 3427,
                  "nodeType": "ExpressionStatement",
                  "src": "2995:34:25"
                },
                {
                  "expression": {
                    "id": 3430,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 3428,
                      "name": "_scheduleTokenAmount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3253,
                      "src": "3039:20:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "hexValue": "30",
                      "id": 3429,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3062:1:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "3039:24:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 3431,
                  "nodeType": "ExpressionStatement",
                  "src": "3039:24:25"
                }
              ]
            },
            "functionSelector": "4b8a3529",
            "id": 3433,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "borrow",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 3380,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "2678:8:25"
            },
            "parameters": {
              "id": 3379,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3376,
                  "mutability": "mutable",
                  "name": "tokenAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 3433,
                  "src": "2610:20:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3375,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2610:7:25",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3378,
                  "mutability": "mutable",
                  "name": "tokenAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 3433,
                  "src": "2632:19:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3377,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2632:7:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2609:43:25"
            },
            "returnParameters": {
              "id": 3381,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2691:0:25"
            },
            "scope": 3516,
            "src": "2594:476:25",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              1177
            ],
            "body": {
              "id": 3469,
              "nodeType": "Block",
              "src": "3140:487:25",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        "id": 3445,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 3440,
                          "name": "_scheduleInvokerAddress",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3249,
                          "src": "3171:23:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 3443,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3206:1:25",
                              "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": 3442,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "3198:7:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 3441,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "3198:7:25",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 3444,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3198:10:25",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "3171:37:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4b6f6c6c61746572616c4c697175696469747950726f78793a206e6f74207363686564756c6564",
                        "id": 3446,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3222:41:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_90f1ee5f16679c4c41f60fb1d23e1b018a67e342e254a06605779689d3eabb9b",
                          "typeString": "literal_string \"KollateralLiquidityProxy: not scheduled\""
                        },
                        "value": "KollateralLiquidityProxy: not scheduled"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_90f1ee5f16679c4c41f60fb1d23e1b018a67e342e254a06605779689d3eabb9b",
                          "typeString": "literal_string \"KollateralLiquidityProxy: not scheduled\""
                        }
                      ],
                      "id": 3439,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "3150:7:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 3447,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3150:123:25",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3448,
                  "nodeType": "ExpressionStatement",
                  "src": "3150:123:25"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 3451,
                            "name": "_scheduleTokenAddress",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3251,
                            "src": "3331:21:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "id": 3452,
                            "name": "_scheduleInvokerAddress",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3249,
                            "src": "3370:23:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          {
                            "id": 3453,
                            "name": "_scheduleTokenAmount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3253,
                            "src": "3411:20:25",
                            "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": 3450,
                          "name": "transfer",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1433,
                          "src": "3305:8:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$",
                            "typeString": "function (address,address,uint256) returns (bool)"
                          }
                        },
                        "id": 3454,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3305:140:25",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4b6f6c6c61746572616c4c697175696469747950726f78793a207472616e7366657220746f20696e766f6b6572206661696c6564",
                        "id": 3455,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3459:54:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_8eda1b4c2c825c8e010d94cec4723f6c7c3e52f780266b540302a12e8e2dabaa",
                          "typeString": "literal_string \"KollateralLiquidityProxy: transfer to invoker failed\""
                        },
                        "value": "KollateralLiquidityProxy: transfer to invoker failed"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_8eda1b4c2c825c8e010d94cec4723f6c7c3e52f780266b540302a12e8e2dabaa",
                          "typeString": "literal_string \"KollateralLiquidityProxy: transfer to invoker failed\""
                        }
                      ],
                      "id": 3449,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "3284:7:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 3456,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3284:239:25",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3457,
                  "nodeType": "ExpressionStatement",
                  "src": "3284:239:25"
                },
                {
                  "assignments": [
                    3459
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3459,
                      "mutability": "mutable",
                      "name": "invoker",
                      "nodeType": "VariableDeclaration",
                      "scope": 3469,
                      "src": "3534:16:25",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IInvoker_$1234",
                        "typeString": "contract IInvoker"
                      },
                      "typeName": {
                        "id": 3458,
                        "name": "IInvoker",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 1234,
                        "src": "3534:8:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IInvoker_$1234",
                          "typeString": "contract IInvoker"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 3463,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 3461,
                        "name": "_scheduleInvokerAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3249,
                        "src": "3562:23:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "id": 3460,
                      "name": "IInvoker",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1234,
                      "src": "3553:8:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_IInvoker_$1234_$",
                        "typeString": "type(contract IInvoker)"
                      }
                    },
                    "id": 3462,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3553:33:25",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IInvoker_$1234",
                      "typeString": "contract IInvoker"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3534:52:25"
                },
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "id": 3464,
                        "name": "invoker",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3459,
                        "src": "3596:7:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IInvoker_$1234",
                          "typeString": "contract IInvoker"
                        }
                      },
                      "id": 3466,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "invokeCallback",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1197,
                      "src": "3596:22:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$__$returns$__$",
                        "typeString": "function () external"
                      }
                    },
                    "id": 3467,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3596:24:25",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3468,
                  "nodeType": "ExpressionStatement",
                  "src": "3596:24:25"
                }
              ]
            },
            "functionSelector": "09c5eabe",
            "id": 3470,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "execute",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 3437,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "3131:8:25"
            },
            "parameters": {
              "id": 3436,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3435,
                  "mutability": "mutable",
                  "name": "data",
                  "nodeType": "VariableDeclaration",
                  "scope": 3470,
                  "src": "3093:19:25",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 3434,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "3093:5:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3092:21:25"
            },
            "returnParameters": {
              "id": 3438,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3140:0:25"
            },
            "scope": 3516,
            "src": "3076:551:25",
            "stateMutability": "payable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 3481,
              "nodeType": "Block",
              "src": "3708:66:25",
              "statements": [
                {
                  "expression": {
                    "baseExpression": {
                      "id": 3477,
                      "name": "_tokenAddressToKTokenAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3247,
                      "src": "3725:28:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                        "typeString": "mapping(address => address)"
                      }
                    },
                    "id": 3479,
                    "indexExpression": {
                      "id": 3478,
                      "name": "tokenAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3472,
                      "src": "3754:12:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "3725:42:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 3476,
                  "id": 3480,
                  "nodeType": "Return",
                  "src": "3718:49:25"
                }
              ]
            },
            "id": 3482,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "poolAddress",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3473,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3472,
                  "mutability": "mutable",
                  "name": "tokenAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 3482,
                  "src": "3654:20:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3471,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3654:7:25",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3653:22:25"
            },
            "returnParameters": {
              "id": 3476,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3475,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 3482,
                  "src": "3699:7:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3474,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3699:7:25",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3698:9:25"
            },
            "scope": 3516,
            "src": "3633:141:25",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 3498,
              "nodeType": "Block",
              "src": "3853:63:25",
              "statements": [
                {
                  "expression": {
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 3496,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "arguments": [
                        {
                          "id": 3490,
                          "name": "tokenAddress",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3484,
                          "src": "3882:12:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 3489,
                        "name": "poolAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3482,
                        "src": "3870:11:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_address_$",
                          "typeString": "function (address) view returns (address)"
                        }
                      },
                      "id": 3491,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "3870:25:25",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "arguments": [
                        {
                          "hexValue": "30",
                          "id": 3494,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "3907:1:25",
                          "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": 3493,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "3899:7:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": {
                          "id": 3492,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3899:7:25",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 3495,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "3899:10:25",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "3870:39:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 3488,
                  "id": 3497,
                  "nodeType": "Return",
                  "src": "3863:46:25"
                }
              ]
            },
            "id": 3499,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isRegistered",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3485,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3484,
                  "mutability": "mutable",
                  "name": "tokenAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 3499,
                  "src": "3802:20:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3483,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3802:7:25",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3801:22:25"
            },
            "returnParameters": {
              "id": 3488,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3487,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 3499,
                  "src": "3847:4:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 3486,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "3847:4:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3846:6:25"
            },
            "scope": 3516,
            "src": "3780:136:25",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 3514,
              "nodeType": "Block",
              "src": "3991:68:25",
              "statements": [
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "id": 3508,
                                "name": "tokenAddress",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3501,
                                "src": "4029:12:25",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 3507,
                              "name": "poolAddress",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3482,
                              "src": "4017:11:25",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_address_$",
                                "typeString": "function (address) view returns (address)"
                              }
                            },
                            "id": 3509,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "4017:25:25",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 3506,
                          "name": "Pausable",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6255,
                          "src": "4008:8:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_Pausable_$6255_$",
                            "typeString": "type(contract Pausable)"
                          }
                        },
                        "id": 3510,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4008:35:25",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Pausable_$6255",
                          "typeString": "contract Pausable"
                        }
                      },
                      "id": 3511,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "paused",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6201,
                      "src": "4008:42:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$__$returns$_t_bool_$",
                        "typeString": "function () view external returns (bool)"
                      }
                    },
                    "id": 3512,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4008:44:25",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 3505,
                  "id": 3513,
                  "nodeType": "Return",
                  "src": "4001:51:25"
                }
              ]
            },
            "id": 3515,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isPaused",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3502,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3501,
                  "mutability": "mutable",
                  "name": "tokenAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 3515,
                  "src": "3940:20:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3500,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3940:7:25",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3939:22:25"
            },
            "returnParameters": {
              "id": 3505,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3504,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 3515,
                  "src": "3985:4:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 3503,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "3985:4:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3984:6:25"
            },
            "scope": 3516,
            "src": "3922:137:25",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          }
        ],
        "scope": 3517,
        "src": "976:3085:25"
      }
    ],
    "src": "640:3422:25"
  },
  "legacyAST": {
    "attributes": {
      "absolutePath": "/Users/andrekorol/src/kollateral/protocol/contracts/liquidity/kollateral/KollateralLiquidityProxy.sol",
      "exportedSymbols": {
        "BalanceCarrier": [
          1464
        ],
        "CollateralizedToken": [
          5197
        ],
        "Context": [
          5279
        ],
        "ERC20": [
          6087
        ],
        "ExtendedMath": [
          1506
        ],
        "ExternalCaller": [
          1563
        ],
        "IERC20": [
          6165
        ],
        "IInvocationHook": [
          1170
        ],
        "IInvokable": [
          1178
        ],
        "IInvoker": [
          1234
        ],
        "ILiquidityProxy": [
          2148
        ],
        "KToken": [
          2115
        ],
        "KollateralLiquidityProxy": [
          3516
        ],
        "Ownable": [
          5388
        ],
        "Pausable": [
          6255
        ],
        "ReentrancyGuard": [
          6295
        ],
        "SafeMath": [
          5584
        ],
        "UnlimitedApprovalErc20": [
          5256
        ]
      },
      "license": "Apache-2.0"
    },
    "children": [
      {
        "attributes": {
          "literals": [
            "solidity",
            "^",
            "0.7",
            ".0"
          ]
        },
        "id": 3228,
        "name": "PragmaDirective",
        "src": "640:23:25"
      },
      {
        "attributes": {
          "SourceUnit": 5389,
          "absolutePath": "@openzeppelin/contracts/access/Ownable.sol",
          "file": "@openzeppelin/contracts/access/Ownable.sol",
          "scope": 3517,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 3229,
        "name": "ImportDirective",
        "src": "665:52:25"
      },
      {
        "attributes": {
          "SourceUnit": 6256,
          "absolutePath": "@openzeppelin/contracts/utils/Pausable.sol",
          "file": "@openzeppelin/contracts/utils/Pausable.sol",
          "scope": 3517,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 3230,
        "name": "ImportDirective",
        "src": "718:52:25"
      },
      {
        "attributes": {
          "SourceUnit": 2149,
          "absolutePath": "/Users/andrekorol/src/kollateral/protocol/contracts/liquidity/ILiquidityProxy.sol",
          "file": "../ILiquidityProxy.sol",
          "scope": 3517,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 3231,
        "name": "ImportDirective",
        "src": "771:32:25"
      },
      {
        "attributes": {
          "SourceUnit": 5198,
          "absolutePath": "/Users/andrekorol/src/kollateral/protocol/contracts/token/CollateralizedToken.sol",
          "file": "../../token/CollateralizedToken.sol",
          "scope": 3517,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 3232,
        "name": "ImportDirective",
        "src": "804:45:25"
      },
      {
        "attributes": {
          "SourceUnit": 2116,
          "absolutePath": "/Users/andrekorol/src/kollateral/protocol/contracts/ktoken/KToken.sol",
          "file": "../../ktoken/KToken.sol",
          "scope": 3517,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 3233,
        "name": "ImportDirective",
        "src": "850:33:25"
      },
      {
        "attributes": {
          "SourceUnit": 1235,
          "absolutePath": "/Users/andrekorol/src/kollateral/protocol/contracts/common/invoke/IInvoker.sol",
          "file": "../../common/invoke/IInvoker.sol",
          "scope": 3517,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 3234,
        "name": "ImportDirective",
        "src": "884:42:25"
      },
      {
        "attributes": {
          "SourceUnit": 1465,
          "absolutePath": "/Users/andrekorol/src/kollateral/protocol/contracts/common/utils/BalanceCarrier.sol",
          "file": "../../common/utils/BalanceCarrier.sol",
          "scope": 3517,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 3235,
        "name": "ImportDirective",
        "src": "927:47:25"
      },
      {
        "attributes": {
          "abstract": false,
          "contractDependencies": [
            1178,
            1464,
            1563,
            2148,
            5279,
            5388
          ],
          "contractKind": "contract",
          "fullyImplemented": true,
          "linearizedBaseContracts": [
            3516,
            1178,
            2148,
            1464,
            1563,
            5388,
            5279
          ],
          "name": "KollateralLiquidityProxy",
          "scope": 3517
        },
        "children": [
          {
            "attributes": {},
            "children": [
              {
                "attributes": {
                  "name": "Ownable",
                  "referencedDeclaration": 5388,
                  "type": "contract Ownable"
                },
                "id": 3236,
                "name": "UserDefinedTypeName",
                "src": "1017:7:25"
              }
            ],
            "id": 3237,
            "name": "InheritanceSpecifier",
            "src": "1017:7:25"
          },
          {
            "attributes": {},
            "children": [
              {
                "attributes": {
                  "name": "BalanceCarrier",
                  "referencedDeclaration": 1464,
                  "type": "contract BalanceCarrier"
                },
                "id": 3238,
                "name": "UserDefinedTypeName",
                "src": "1030:14:25"
              }
            ],
            "id": 3239,
            "name": "InheritanceSpecifier",
            "src": "1030:14:25"
          },
          {
            "attributes": {},
            "children": [
              {
                "attributes": {
                  "name": "ILiquidityProxy",
                  "referencedDeclaration": 2148,
                  "type": "contract ILiquidityProxy"
                },
                "id": 3240,
                "name": "UserDefinedTypeName",
                "src": "1050:15:25"
              }
            ],
            "id": 3241,
            "name": "InheritanceSpecifier",
            "src": "1050:15:25"
          },
          {
            "attributes": {},
            "children": [
              {
                "attributes": {
                  "name": "IInvokable",
                  "referencedDeclaration": 1178,
                  "type": "contract IInvokable"
                },
                "id": 3242,
                "name": "UserDefinedTypeName",
                "src": "1071:10:25"
              }
            ],
            "id": 3243,
            "name": "InheritanceSpecifier",
            "src": "1071:10:25"
          },
          {
            "attributes": {
              "constant": false,
              "mutability": "mutable",
              "name": "_tokenAddressToKTokenAddress",
              "scope": 3516,
              "stateVariable": true,
              "storageLocation": "default",
              "type": "mapping(address => address)",
              "visibility": "internal"
            },
            "children": [
              {
                "attributes": {
                  "type": "mapping(address => address)"
                },
                "children": [
                  {
                    "attributes": {
                      "name": "address",
                      "type": "address"
                    },
                    "id": 3244,
                    "name": "ElementaryTypeName",
                    "src": "1096:7:25"
                  },
                  {
                    "attributes": {
                      "name": "address",
                      "stateMutability": "nonpayable",
                      "type": "address"
                    },
                    "id": 3245,
                    "name": "ElementaryTypeName",
                    "src": "1107:7:25"
                  }
                ],
                "id": 3246,
                "name": "Mapping",
                "src": "1088:27:25"
              }
            ],
            "id": 3247,
            "name": "VariableDeclaration",
            "src": "1088:56:25"
          },
          {
            "attributes": {
              "constant": false,
              "mutability": "mutable",
              "name": "_scheduleInvokerAddress",
              "scope": 3516,
              "stateVariable": true,
              "storageLocation": "default",
              "type": "address payable",
              "visibility": "internal"
            },
            "children": [
              {
                "attributes": {
                  "name": "address",
                  "stateMutability": "payable",
                  "type": "address payable"
                },
                "id": 3248,
                "name": "ElementaryTypeName",
                "src": "1151:15:25"
              }
            ],
            "id": 3249,
            "name": "VariableDeclaration",
            "src": "1151:48:25"
          },
          {
            "attributes": {
              "constant": false,
              "mutability": "mutable",
              "name": "_scheduleTokenAddress",
              "scope": 3516,
              "stateVariable": true,
              "storageLocation": "default",
              "type": "address",
              "visibility": "internal"
            },
            "children": [
              {
                "attributes": {
                  "name": "address",
                  "stateMutability": "nonpayable",
                  "type": "address"
                },
                "id": 3250,
                "name": "ElementaryTypeName",
                "src": "1205:7:25"
              }
            ],
            "id": 3251,
            "name": "VariableDeclaration",
            "src": "1205:38:25"
          },
          {
            "attributes": {
              "constant": false,
              "mutability": "mutable",
              "name": "_scheduleTokenAmount",
              "scope": 3516,
              "stateVariable": true,
              "storageLocation": "default",
              "type": "uint256",
              "visibility": "internal"
            },
            "children": [
              {
                "attributes": {
                  "name": "uint256",
                  "type": "uint256"
                },
                "id": 3252,
                "name": "ElementaryTypeName",
                "src": "1249:7:25"
              }
            ],
            "id": 3253,
            "name": "VariableDeclaration",
            "src": "1249:37:25"
          },
          {
            "attributes": {
              "implemented": true,
              "isConstructor": true,
              "kind": "constructor",
              "name": "",
              "scope": 3516,
              "stateMutability": "nonpayable",
              "virtual": false,
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 3254,
                "name": "ParameterList",
                "src": "1304:2:25"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 3261,
                "name": "ParameterList",
                "src": "1334:0:25"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 1464,
                      "type": "type(contract BalanceCarrier)",
                      "value": "BalanceCarrier"
                    },
                    "id": 3255,
                    "name": "Identifier",
                    "src": "1307:14:25"
                  },
                  {
                    "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": 3256,
                            "name": "ElementaryTypeName",
                            "src": "1322:7:25"
                          }
                        ],
                        "id": 3257,
                        "name": "ElementaryTypeNameExpression",
                        "src": "1322:7:25"
                      },
                      {
                        "attributes": {
                          "hexvalue": "31",
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "token": "number",
                          "type": "int_const 1",
                          "value": "1"
                        },
                        "id": 3258,
                        "name": "Literal",
                        "src": "1330:1:25"
                      }
                    ],
                    "id": 3259,
                    "name": "FunctionCall",
                    "src": "1322:10:25"
                  }
                ],
                "id": 3260,
                "name": "ModifierInvocation",
                "src": "1307:26:25"
              },
              {
                "attributes": {
                  "statements": [
                    null
                  ]
                },
                "children": [],
                "id": 3262,
                "name": "Block",
                "src": "1334:2:25"
              }
            ],
            "id": 3263,
            "name": "FunctionDefinition",
            "src": "1293:43:25"
          },
          {
            "attributes": {
              "implemented": true,
              "isConstructor": false,
              "kind": "receive",
              "modifiers": [
                null
              ],
              "name": "",
              "scope": 3516,
              "stateMutability": "payable",
              "virtual": false,
              "visibility": "external"
            },
            "children": [
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 3264,
                "name": "ParameterList",
                "src": "1349:2:25"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 3265,
                "name": "ParameterList",
                "src": "1369:0:25"
              },
              {
                "attributes": {
                  "statements": [
                    null
                  ]
                },
                "children": [],
                "id": 3266,
                "name": "Block",
                "src": "1369:2:25"
              }
            ],
            "id": 3267,
            "name": "FunctionDefinition",
            "src": "1342:29:25"
          },
          {
            "attributes": {
              "implemented": true,
              "isConstructor": false,
              "kind": "fallback",
              "modifiers": [
                null
              ],
              "name": "",
              "scope": 3516,
              "stateMutability": "payable",
              "virtual": false,
              "visibility": "external"
            },
            "children": [
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 3268,
                "name": "ParameterList",
                "src": "1385:2:25"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 3269,
                "name": "ParameterList",
                "src": "1405:0:25"
              },
              {
                "attributes": {
                  "statements": [
                    null
                  ]
                },
                "children": [],
                "id": 3270,
                "name": "Block",
                "src": "1405:2:25"
              }
            ],
            "id": 3271,
            "name": "FunctionDefinition",
            "src": "1377:30:25"
          },
          {
            "attributes": {
              "functionSelector": "7286e5e5",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "name": "registerPool",
              "scope": 3516,
              "stateMutability": "nonpayable",
              "virtual": false,
              "visibility": "external"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "tokenAddress",
                      "scope": 3287,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 3272,
                        "name": "ElementaryTypeName",
                        "src": "1435:7:25"
                      }
                    ],
                    "id": 3273,
                    "name": "VariableDeclaration",
                    "src": "1435:20:25"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "kTokenAddress",
                      "scope": 3287,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 3274,
                        "name": "ElementaryTypeName",
                        "src": "1457:7:25"
                      }
                    ],
                    "id": 3275,
                    "name": "VariableDeclaration",
                    "src": "1457:21:25"
                  }
                ],
                "id": 3276,
                "name": "ParameterList",
                "src": "1434:45:25"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 3279,
                "name": "ParameterList",
                "src": "1519:0:25"
              },
              {
                "attributes": {},
                "children": [
                  {
                    "attributes": {
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 5337,
                      "type": "modifier ()",
                      "value": "onlyOwner"
                    },
                    "id": 3277,
                    "name": "Identifier",
                    "src": "1505:9:25"
                  }
                ],
                "id": 3278,
                "name": "ModifierInvocation",
                "src": "1505:9:25"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "address"
                        },
                        "children": [
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "type": "address"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 3247,
                                  "type": "mapping(address => address)",
                                  "value": "_tokenAddressToKTokenAddress"
                                },
                                "id": 3280,
                                "name": "Identifier",
                                "src": "1529:28:25"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 3273,
                                  "type": "address",
                                  "value": "tokenAddress"
                                },
                                "id": 3281,
                                "name": "Identifier",
                                "src": "1558:12:25"
                              }
                            ],
                            "id": 3282,
                            "name": "IndexAccess",
                            "src": "1529:42:25"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3275,
                              "type": "address",
                              "value": "kTokenAddress"
                            },
                            "id": 3283,
                            "name": "Identifier",
                            "src": "1574:13:25"
                          }
                        ],
                        "id": 3284,
                        "name": "Assignment",
                        "src": "1529:58:25"
                      }
                    ],
                    "id": 3285,
                    "name": "ExpressionStatement",
                    "src": "1529:58:25"
                  }
                ],
                "id": 3286,
                "name": "Block",
                "src": "1519:75:25"
              }
            ],
            "id": 3287,
            "name": "FunctionDefinition",
            "src": "1413:181:25"
          },
          {
            "attributes": {
              "functionSelector": "7e72c7d7",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "name": "deregisterPool",
              "scope": 3516,
              "stateMutability": "nonpayable",
              "virtual": false,
              "visibility": "external"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "tokenAddress",
                      "scope": 3304,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 3288,
                        "name": "ElementaryTypeName",
                        "src": "1624:7:25"
                      }
                    ],
                    "id": 3289,
                    "name": "VariableDeclaration",
                    "src": "1624:20:25"
                  }
                ],
                "id": 3290,
                "name": "ParameterList",
                "src": "1623:22:25"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 3293,
                "name": "ParameterList",
                "src": "1665:0:25"
              },
              {
                "attributes": {},
                "children": [
                  {
                    "attributes": {
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 5337,
                      "type": "modifier ()",
                      "value": "onlyOwner"
                    },
                    "id": 3291,
                    "name": "Identifier",
                    "src": "1655:9:25"
                  }
                ],
                "id": 3292,
                "name": "ModifierInvocation",
                "src": "1655:9:25"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "address"
                        },
                        "children": [
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "type": "address"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 3247,
                                  "type": "mapping(address => address)",
                                  "value": "_tokenAddressToKTokenAddress"
                                },
                                "id": 3294,
                                "name": "Identifier",
                                "src": "1675:28:25"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 3289,
                                  "type": "address",
                                  "value": "tokenAddress"
                                },
                                "id": 3295,
                                "name": "Identifier",
                                "src": "1704:12:25"
                              }
                            ],
                            "id": 3296,
                            "name": "IndexAccess",
                            "src": "1675:42:25"
                          },
                          {
                            "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": 3297,
                                    "name": "ElementaryTypeName",
                                    "src": "1720:7:25"
                                  }
                                ],
                                "id": 3298,
                                "name": "ElementaryTypeNameExpression",
                                "src": "1720:7:25"
                              },
                              {
                                "attributes": {
                                  "hexvalue": "30",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "token": "number",
                                  "type": "int_const 0",
                                  "value": "0"
                                },
                                "id": 3299,
                                "name": "Literal",
                                "src": "1728:1:25"
                              }
                            ],
                            "id": 3300,
                            "name": "FunctionCall",
                            "src": "1720:10:25"
                          }
                        ],
                        "id": 3301,
                        "name": "Assignment",
                        "src": "1675:55:25"
                      }
                    ],
                    "id": 3302,
                    "name": "ExpressionStatement",
                    "src": "1675:55:25"
                  }
                ],
                "id": 3303,
                "name": "Block",
                "src": "1665:72:25"
              }
            ],
            "id": 3304,
            "name": "FunctionDefinition",
            "src": "1600:137:25"
          },
          {
            "attributes": {
              "baseFunctions": [
                2131
              ],
              "functionSelector": "680c7b94",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "getRepaymentAddress",
              "scope": 3516,
              "stateMutability": "view",
              "virtual": false,
              "visibility": "external"
            },
            "children": [
              {
                "attributes": {
                  "overrides": [
                    null
                  ]
                },
                "id": 3308,
                "name": "OverrideSpecifier",
                "src": "1832:8:25"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "tokenAddress",
                      "scope": 3317,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 3305,
                        "name": "ElementaryTypeName",
                        "src": "1772:7:25"
                      }
                    ],
                    "id": 3306,
                    "name": "VariableDeclaration",
                    "src": "1772:20:25"
                  }
                ],
                "id": 3307,
                "name": "ParameterList",
                "src": "1771:22:25"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "",
                      "scope": 3317,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 3309,
                        "name": "ElementaryTypeName",
                        "src": "1858:7:25"
                      }
                    ],
                    "id": 3310,
                    "name": "VariableDeclaration",
                    "src": "1858:7:25"
                  }
                ],
                "id": 3311,
                "name": "ParameterList",
                "src": "1857:9:25"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "functionReturnParameters": 3311
                    },
                    "children": [
                      {
                        "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": 3482,
                              "type": "function (address) view returns (address)",
                              "value": "poolAddress"
                            },
                            "id": 3312,
                            "name": "Identifier",
                            "src": "1888:11:25"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3306,
                              "type": "address",
                              "value": "tokenAddress"
                            },
                            "id": 3313,
                            "name": "Identifier",
                            "src": "1900:12:25"
                          }
                        ],
                        "id": 3314,
                        "name": "FunctionCall",
                        "src": "1888:25:25"
                      }
                    ],
                    "id": 3315,
                    "name": "Return",
                    "src": "1881:32:25"
                  }
                ],
                "id": 3316,
                "name": "Block",
                "src": "1871:49:25"
              }
            ],
            "id": 3317,
            "name": "FunctionDefinition",
            "src": "1743:177:25"
          },
          {
            "attributes": {
              "baseFunctions": [
                2124
              ],
              "functionSelector": "c32dc3b6",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "getTotalReserve",
              "scope": 3516,
              "stateMutability": "view",
              "virtual": false,
              "visibility": "external"
            },
            "children": [
              {
                "attributes": {
                  "overrides": [
                    null
                  ]
                },
                "id": 3321,
                "name": "OverrideSpecifier",
                "src": "2011:8:25"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "tokenAddress",
                      "scope": 3350,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 3318,
                        "name": "ElementaryTypeName",
                        "src": "1951:7:25"
                      }
                    ],
                    "id": 3319,
                    "name": "VariableDeclaration",
                    "src": "1951:20:25"
                  }
                ],
                "id": 3320,
                "name": "ParameterList",
                "src": "1950:22:25"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "",
                      "scope": 3350,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 3322,
                        "name": "ElementaryTypeName",
                        "src": "2037:7:25"
                      }
                    ],
                    "id": 3323,
                    "name": "VariableDeclaration",
                    "src": "2037:7:25"
                  }
                ],
                "id": 3324,
                "name": "ParameterList",
                "src": "2036:9:25"
              },
              {
                "children": [
                  {
                    "attributes": {},
                    "children": [
                      {
                        "attributes": {
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "&&",
                          "type": "bool"
                        },
                        "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": 3499,
                                  "type": "function (address) view returns (bool)",
                                  "value": "isRegistered"
                                },
                                "id": 3325,
                                "name": "Identifier",
                                "src": "2064:12:25"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 3319,
                                  "type": "address",
                                  "value": "tokenAddress"
                                },
                                "id": 3326,
                                "name": "Identifier",
                                "src": "2077:12:25"
                              }
                            ],
                            "id": 3327,
                            "name": "FunctionCall",
                            "src": "2064:26:25"
                          },
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "!",
                              "prefix": true,
                              "type": "bool"
                            },
                            "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": 3515,
                                      "type": "function (address) view returns (bool)",
                                      "value": "isPaused"
                                    },
                                    "id": 3328,
                                    "name": "Identifier",
                                    "src": "2095:8:25"
                                  },
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 3319,
                                      "type": "address",
                                      "value": "tokenAddress"
                                    },
                                    "id": 3329,
                                    "name": "Identifier",
                                    "src": "2104:12:25"
                                  }
                                ],
                                "id": 3330,
                                "name": "FunctionCall",
                                "src": "2095:22:25"
                              }
                            ],
                            "id": 3331,
                            "name": "UnaryOperation",
                            "src": "2094:23:25"
                          }
                        ],
                        "id": 3332,
                        "name": "BinaryOperation",
                        "src": "2064:53:25"
                      },
                      {
                        "children": [
                          {
                            "attributes": {
                              "assignments": [
                                3334
                              ]
                            },
                            "children": [
                              {
                                "attributes": {
                                  "constant": false,
                                  "mutability": "mutable",
                                  "name": "pool",
                                  "scope": 3345,
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "type": "contract CollateralizedToken",
                                  "visibility": "internal"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "name": "CollateralizedToken",
                                      "referencedDeclaration": 5197,
                                      "type": "contract CollateralizedToken"
                                    },
                                    "id": 3333,
                                    "name": "UserDefinedTypeName",
                                    "src": "2133:19:25"
                                  }
                                ],
                                "id": 3334,
                                "name": "VariableDeclaration",
                                "src": "2133:24:25"
                              },
                              {
                                "attributes": {
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "tryCall": false,
                                  "type": "contract CollateralizedToken",
                                  "type_conversion": true
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      ],
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 5197,
                                      "type": "type(contract CollateralizedToken)",
                                      "value": "CollateralizedToken"
                                    },
                                    "id": 3335,
                                    "name": "Identifier",
                                    "src": "2160:19:25"
                                  },
                                  {
                                    "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": 3482,
                                          "type": "function (address) view returns (address)",
                                          "value": "poolAddress"
                                        },
                                        "id": 3336,
                                        "name": "Identifier",
                                        "src": "2197:11:25"
                                      },
                                      {
                                        "attributes": {
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 3319,
                                          "type": "address",
                                          "value": "tokenAddress"
                                        },
                                        "id": 3337,
                                        "name": "Identifier",
                                        "src": "2209:12:25"
                                      }
                                    ],
                                    "id": 3338,
                                    "name": "FunctionCall",
                                    "src": "2197:25:25"
                                  }
                                ],
                                "id": 3339,
                                "name": "FunctionCall",
                                "src": "2160:76:25"
                              }
                            ],
                            "id": 3340,
                            "name": "VariableDeclarationStatement",
                            "src": "2133:103:25"
                          },
                          {
                            "attributes": {
                              "functionReturnParameters": 3324
                            },
                            "children": [
                              {
                                "attributes": {
                                  "arguments": [
                                    null
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "tryCall": false,
                                  "type": "uint256",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        null
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "totalReserve",
                                      "referencedDeclaration": 5174,
                                      "type": "function () view external returns (uint256)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 3334,
                                          "type": "contract CollateralizedToken",
                                          "value": "pool"
                                        },
                                        "id": 3341,
                                        "name": "Identifier",
                                        "src": "2257:4:25"
                                      }
                                    ],
                                    "id": 3342,
                                    "name": "MemberAccess",
                                    "src": "2257:17:25"
                                  }
                                ],
                                "id": 3343,
                                "name": "FunctionCall",
                                "src": "2257:19:25"
                              }
                            ],
                            "id": 3344,
                            "name": "Return",
                            "src": "2250:26:25"
                          }
                        ],
                        "id": 3345,
                        "name": "Block",
                        "src": "2119:168:25"
                      }
                    ],
                    "id": 3346,
                    "name": "IfStatement",
                    "src": "2060:227:25"
                  },
                  {
                    "attributes": {
                      "functionReturnParameters": 3324
                    },
                    "children": [
                      {
                        "attributes": {
                          "hexvalue": "30",
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "token": "number",
                          "type": "int_const 0",
                          "value": "0"
                        },
                        "id": 3347,
                        "name": "Literal",
                        "src": "2303:1:25"
                      }
                    ],
                    "id": 3348,
                    "name": "Return",
                    "src": "2296:8:25"
                  }
                ],
                "id": 3349,
                "name": "Block",
                "src": "2050:261:25"
              }
            ],
            "id": 3350,
            "name": "FunctionDefinition",
            "src": "1926:385:25"
          },
          {
            "attributes": {
              "baseFunctions": [
                2140
              ],
              "functionSelector": "aa819057",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "getRepaymentAmount",
              "scope": 3516,
              "stateMutability": "view",
              "virtual": false,
              "visibility": "external"
            },
            "children": [
              {
                "attributes": {
                  "overrides": [
                    null
                  ]
                },
                "id": 3356,
                "name": "OverrideSpecifier",
                "src": "2426:8:25"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "tokenAddress",
                      "scope": 3374,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 3351,
                        "name": "ElementaryTypeName",
                        "src": "2345:7:25"
                      }
                    ],
                    "id": 3352,
                    "name": "VariableDeclaration",
                    "src": "2345:20:25"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "tokenAmount",
                      "scope": 3374,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 3353,
                        "name": "ElementaryTypeName",
                        "src": "2367:7:25"
                      }
                    ],
                    "id": 3354,
                    "name": "VariableDeclaration",
                    "src": "2367:19:25"
                  }
                ],
                "id": 3355,
                "name": "ParameterList",
                "src": "2344:43:25"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "",
                      "scope": 3374,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 3357,
                        "name": "ElementaryTypeName",
                        "src": "2452:7:25"
                      }
                    ],
                    "id": 3358,
                    "name": "VariableDeclaration",
                    "src": "2452:7:25"
                  }
                ],
                "id": 3359,
                "name": "ParameterList",
                "src": "2451:9:25"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "assignments": [
                        3361
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "pool",
                          "scope": 3373,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "contract KToken",
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "KToken",
                              "referencedDeclaration": 2115,
                              "type": "contract KToken"
                            },
                            "id": 3360,
                            "name": "UserDefinedTypeName",
                            "src": "2475:6:25"
                          }
                        ],
                        "id": 3361,
                        "name": "VariableDeclaration",
                        "src": "2475:11:25"
                      },
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "contract KToken",
                          "type_conversion": true
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2115,
                              "type": "type(contract KToken)",
                              "value": "KToken"
                            },
                            "id": 3362,
                            "name": "Identifier",
                            "src": "2489:6:25"
                          },
                          {
                            "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": 3482,
                                  "type": "function (address) view returns (address)",
                                  "value": "poolAddress"
                                },
                                "id": 3363,
                                "name": "Identifier",
                                "src": "2496:11:25"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 3352,
                                  "type": "address",
                                  "value": "tokenAddress"
                                },
                                "id": 3364,
                                "name": "Identifier",
                                "src": "2508:12:25"
                              }
                            ],
                            "id": 3365,
                            "name": "FunctionCall",
                            "src": "2496:25:25"
                          }
                        ],
                        "id": 3366,
                        "name": "FunctionCall",
                        "src": "2489:33:25"
                      }
                    ],
                    "id": 3367,
                    "name": "VariableDeclarationStatement",
                    "src": "2475:47:25"
                  },
                  {
                    "attributes": {
                      "functionReturnParameters": 3359
                    },
                    "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": "calculateRepaymentAmount",
                              "referencedDeclaration": 1984,
                              "type": "function (uint256) view external returns (uint256)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 3361,
                                  "type": "contract KToken",
                                  "value": "pool"
                                },
                                "id": 3368,
                                "name": "Identifier",
                                "src": "2539:4:25"
                              }
                            ],
                            "id": 3369,
                            "name": "MemberAccess",
                            "src": "2539:29:25"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3354,
                              "type": "uint256",
                              "value": "tokenAmount"
                            },
                            "id": 3370,
                            "name": "Identifier",
                            "src": "2569:11:25"
                          }
                        ],
                        "id": 3371,
                        "name": "FunctionCall",
                        "src": "2539:42:25"
                      }
                    ],
                    "id": 3372,
                    "name": "Return",
                    "src": "2532:49:25"
                  }
                ],
                "id": 3373,
                "name": "Block",
                "src": "2465:123:25"
              }
            ],
            "id": 3374,
            "name": "FunctionDefinition",
            "src": "2317:271:25"
          },
          {
            "attributes": {
              "baseFunctions": [
                2147
              ],
              "functionSelector": "4b8a3529",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "borrow",
              "scope": 3516,
              "stateMutability": "nonpayable",
              "virtual": false,
              "visibility": "external"
            },
            "children": [
              {
                "attributes": {
                  "overrides": [
                    null
                  ]
                },
                "id": 3380,
                "name": "OverrideSpecifier",
                "src": "2678:8:25"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "tokenAddress",
                      "scope": 3433,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 3375,
                        "name": "ElementaryTypeName",
                        "src": "2610:7:25"
                      }
                    ],
                    "id": 3376,
                    "name": "VariableDeclaration",
                    "src": "2610:20:25"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "tokenAmount",
                      "scope": 3433,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 3377,
                        "name": "ElementaryTypeName",
                        "src": "2632:7:25"
                      }
                    ],
                    "id": 3378,
                    "name": "VariableDeclaration",
                    "src": "2632:19:25"
                  }
                ],
                "id": 3379,
                "name": "ParameterList",
                "src": "2609:43:25"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 3381,
                "name": "ParameterList",
                "src": "2691:0:25"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "address payable"
                        },
                        "children": [
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3249,
                              "type": "address payable",
                              "value": "_scheduleInvokerAddress"
                            },
                            "id": 3382,
                            "name": "Identifier",
                            "src": "2701:23:25"
                          },
                          {
                            "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": 3383,
                                "name": "Identifier",
                                "src": "2727:3:25"
                              }
                            ],
                            "id": 3384,
                            "name": "MemberAccess",
                            "src": "2727:10:25"
                          }
                        ],
                        "id": 3385,
                        "name": "Assignment",
                        "src": "2701:36:25"
                      }
                    ],
                    "id": 3386,
                    "name": "ExpressionStatement",
                    "src": "2701:36:25"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "address"
                        },
                        "children": [
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3251,
                              "type": "address",
                              "value": "_scheduleTokenAddress"
                            },
                            "id": 3387,
                            "name": "Identifier",
                            "src": "2747:21:25"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3376,
                              "type": "address",
                              "value": "tokenAddress"
                            },
                            "id": 3388,
                            "name": "Identifier",
                            "src": "2771:12:25"
                          }
                        ],
                        "id": 3389,
                        "name": "Assignment",
                        "src": "2747:36:25"
                      }
                    ],
                    "id": 3390,
                    "name": "ExpressionStatement",
                    "src": "2747:36:25"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "uint256"
                        },
                        "children": [
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3253,
                              "type": "uint256",
                              "value": "_scheduleTokenAmount"
                            },
                            "id": 3391,
                            "name": "Identifier",
                            "src": "2793:20:25"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3378,
                              "type": "uint256",
                              "value": "tokenAmount"
                            },
                            "id": 3392,
                            "name": "Identifier",
                            "src": "2816:11:25"
                          }
                        ],
                        "id": 3393,
                        "name": "Assignment",
                        "src": "2793:34:25"
                      }
                    ],
                    "id": 3394,
                    "name": "ExpressionStatement",
                    "src": "2793:34:25"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        3396
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "pool",
                          "scope": 3432,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "contract KToken",
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "KToken",
                              "referencedDeclaration": 2115,
                              "type": "contract KToken"
                            },
                            "id": 3395,
                            "name": "UserDefinedTypeName",
                            "src": "2838:6:25"
                          }
                        ],
                        "id": 3396,
                        "name": "VariableDeclaration",
                        "src": "2838:11:25"
                      },
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "contract KToken",
                          "type_conversion": true
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2115,
                              "type": "type(contract KToken)",
                              "value": "KToken"
                            },
                            "id": 3397,
                            "name": "Identifier",
                            "src": "2852:6:25"
                          },
                          {
                            "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": 3482,
                                  "type": "function (address) view returns (address)",
                                  "value": "poolAddress"
                                },
                                "id": 3398,
                                "name": "Identifier",
                                "src": "2859:11:25"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 3376,
                                  "type": "address",
                                  "value": "tokenAddress"
                                },
                                "id": 3399,
                                "name": "Identifier",
                                "src": "2871:12:25"
                              }
                            ],
                            "id": 3400,
                            "name": "FunctionCall",
                            "src": "2859:25:25"
                          }
                        ],
                        "id": 3401,
                        "name": "FunctionCall",
                        "src": "2852:33:25"
                      }
                    ],
                    "id": 3402,
                    "name": "VariableDeclarationStatement",
                    "src": "2838:47:25"
                  },
                  {
                    "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_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                                  "typeString": "literal_string \"\""
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "invoke",
                              "referencedDeclaration": 1880,
                              "type": "function (address,bytes memory,uint256) payable external"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 3396,
                                  "type": "contract KToken",
                                  "value": "pool"
                                },
                                "id": 3403,
                                "name": "Identifier",
                                "src": "2895:4:25"
                              }
                            ],
                            "id": 3405,
                            "name": "MemberAccess",
                            "src": "2895:11:25"
                          },
                          {
                            "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$_KollateralLiquidityProxy_$3516",
                                      "typeString": "contract KollateralLiquidityProxy"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "type": "type(address)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "name": "address"
                                    },
                                    "id": 3406,
                                    "name": "ElementaryTypeName",
                                    "src": "2907:7:25"
                                  }
                                ],
                                "id": 3407,
                                "name": "ElementaryTypeNameExpression",
                                "src": "2907:7:25"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": -28,
                                  "type": "contract KollateralLiquidityProxy",
                                  "value": "this"
                                },
                                "id": 3408,
                                "name": "Identifier",
                                "src": "2915:4:25"
                              }
                            ],
                            "id": 3409,
                            "name": "FunctionCall",
                            "src": "2907:13:25"
                          },
                          {
                            "attributes": {
                              "hexvalue": "",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "token": "string",
                              "type": "literal_string \"\"",
                              "value": ""
                            },
                            "id": 3410,
                            "name": "Literal",
                            "src": "2922:2:25"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3378,
                              "type": "uint256",
                              "value": "tokenAmount"
                            },
                            "id": 3411,
                            "name": "Identifier",
                            "src": "2926:11:25"
                          }
                        ],
                        "id": 3412,
                        "name": "FunctionCall",
                        "src": "2895:43:25"
                      }
                    ],
                    "id": 3413,
                    "name": "ExpressionStatement",
                    "src": "2895:43:25"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "address payable"
                        },
                        "children": [
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3249,
                              "type": "address payable",
                              "value": "_scheduleInvokerAddress"
                            },
                            "id": 3414,
                            "name": "Identifier",
                            "src": "2949:23:25"
                          },
                          {
                            "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": 3415,
                                    "name": "ElementaryTypeName",
                                    "src": "2975:7:25"
                                  }
                                ],
                                "id": 3416,
                                "name": "ElementaryTypeNameExpression",
                                "src": "2975:7:25"
                              },
                              {
                                "attributes": {
                                  "hexvalue": "30",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "token": "number",
                                  "type": "int_const 0",
                                  "value": "0"
                                },
                                "id": 3417,
                                "name": "Literal",
                                "src": "2983:1:25"
                              }
                            ],
                            "id": 3418,
                            "name": "FunctionCall",
                            "src": "2975:10:25"
                          }
                        ],
                        "id": 3419,
                        "name": "Assignment",
                        "src": "2949:36:25"
                      }
                    ],
                    "id": 3420,
                    "name": "ExpressionStatement",
                    "src": "2949:36:25"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "address"
                        },
                        "children": [
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3251,
                              "type": "address",
                              "value": "_scheduleTokenAddress"
                            },
                            "id": 3421,
                            "name": "Identifier",
                            "src": "2995:21:25"
                          },
                          {
                            "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": 3422,
                                    "name": "ElementaryTypeName",
                                    "src": "3019:7:25"
                                  }
                                ],
                                "id": 3423,
                                "name": "ElementaryTypeNameExpression",
                                "src": "3019:7:25"
                              },
                              {
                                "attributes": {
                                  "hexvalue": "30",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "token": "number",
                                  "type": "int_const 0",
                                  "value": "0"
                                },
                                "id": 3424,
                                "name": "Literal",
                                "src": "3027:1:25"
                              }
                            ],
                            "id": 3425,
                            "name": "FunctionCall",
                            "src": "3019:10:25"
                          }
                        ],
                        "id": 3426,
                        "name": "Assignment",
                        "src": "2995:34:25"
                      }
                    ],
                    "id": 3427,
                    "name": "ExpressionStatement",
                    "src": "2995:34:25"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "uint256"
                        },
                        "children": [
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3253,
                              "type": "uint256",
                              "value": "_scheduleTokenAmount"
                            },
                            "id": 3428,
                            "name": "Identifier",
                            "src": "3039:20:25"
                          },
                          {
                            "attributes": {
                              "hexvalue": "30",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "token": "number",
                              "type": "int_const 0",
                              "value": "0"
                            },
                            "id": 3429,
                            "name": "Literal",
                            "src": "3062:1:25"
                          }
                        ],
                        "id": 3430,
                        "name": "Assignment",
                        "src": "3039:24:25"
                      }
                    ],
                    "id": 3431,
                    "name": "ExpressionStatement",
                    "src": "3039:24:25"
                  }
                ],
                "id": 3432,
                "name": "Block",
                "src": "2691:379:25"
              }
            ],
            "id": 3433,
            "name": "FunctionDefinition",
            "src": "2594:476:25"
          },
          {
            "attributes": {
              "baseFunctions": [
                1177
              ],
              "functionSelector": "09c5eabe",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "execute",
              "scope": 3516,
              "stateMutability": "payable",
              "virtual": false,
              "visibility": "external"
            },
            "children": [
              {
                "attributes": {
                  "overrides": [
                    null
                  ]
                },
                "id": 3437,
                "name": "OverrideSpecifier",
                "src": "3131:8:25"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "data",
                      "scope": 3470,
                      "stateVariable": false,
                      "storageLocation": "calldata",
                      "type": "bytes",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 3434,
                        "name": "ElementaryTypeName",
                        "src": "3093:5:25"
                      }
                    ],
                    "id": 3435,
                    "name": "VariableDeclaration",
                    "src": "3093:19:25"
                  }
                ],
                "id": 3436,
                "name": "ParameterList",
                "src": "3092:21:25"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 3438,
                "name": "ParameterList",
                "src": "3140:0:25"
              },
              {
                "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_90f1ee5f16679c4c41f60fb1d23e1b018a67e342e254a06605779689d3eabb9b",
                                  "typeString": "literal_string \"KollateralLiquidityProxy: not scheduled\""
                                }
                              ],
                              "overloadedDeclarations": [
                                -18,
                                -18
                              ],
                              "referencedDeclaration": -18,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 3439,
                            "name": "Identifier",
                            "src": "3150:7:25"
                          },
                          {
                            "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": 3249,
                                  "type": "address payable",
                                  "value": "_scheduleInvokerAddress"
                                },
                                "id": 3440,
                                "name": "Identifier",
                                "src": "3171:23:25"
                              },
                              {
                                "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": 3441,
                                        "name": "ElementaryTypeName",
                                        "src": "3198:7:25"
                                      }
                                    ],
                                    "id": 3442,
                                    "name": "ElementaryTypeNameExpression",
                                    "src": "3198:7:25"
                                  },
                                  {
                                    "attributes": {
                                      "hexvalue": "30",
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "token": "number",
                                      "type": "int_const 0",
                                      "value": "0"
                                    },
                                    "id": 3443,
                                    "name": "Literal",
                                    "src": "3206:1:25"
                                  }
                                ],
                                "id": 3444,
                                "name": "FunctionCall",
                                "src": "3198:10:25"
                              }
                            ],
                            "id": 3445,
                            "name": "BinaryOperation",
                            "src": "3171:37:25"
                          },
                          {
                            "attributes": {
                              "hexvalue": "4b6f6c6c61746572616c4c697175696469747950726f78793a206e6f74207363686564756c6564",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "token": "string",
                              "type": "literal_string \"KollateralLiquidityProxy: not scheduled\"",
                              "value": "KollateralLiquidityProxy: not scheduled"
                            },
                            "id": 3446,
                            "name": "Literal",
                            "src": "3222:41:25"
                          }
                        ],
                        "id": 3447,
                        "name": "FunctionCall",
                        "src": "3150:123:25"
                      }
                    ],
                    "id": 3448,
                    "name": "ExpressionStatement",
                    "src": "3150:123:25"
                  },
                  {
                    "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_8eda1b4c2c825c8e010d94cec4723f6c7c3e52f780266b540302a12e8e2dabaa",
                                  "typeString": "literal_string \"KollateralLiquidityProxy: transfer to invoker failed\""
                                }
                              ],
                              "overloadedDeclarations": [
                                -18,
                                -18
                              ],
                              "referencedDeclaration": -18,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 3449,
                            "name": "Identifier",
                            "src": "3284:7:25"
                          },
                          {
                            "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": 3450,
                                "name": "Identifier",
                                "src": "3305:8:25"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 3251,
                                  "type": "address",
                                  "value": "_scheduleTokenAddress"
                                },
                                "id": 3451,
                                "name": "Identifier",
                                "src": "3331:21:25"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 3249,
                                  "type": "address payable",
                                  "value": "_scheduleInvokerAddress"
                                },
                                "id": 3452,
                                "name": "Identifier",
                                "src": "3370:23:25"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 3253,
                                  "type": "uint256",
                                  "value": "_scheduleTokenAmount"
                                },
                                "id": 3453,
                                "name": "Identifier",
                                "src": "3411:20:25"
                              }
                            ],
                            "id": 3454,
                            "name": "FunctionCall",
                            "src": "3305:140:25"
                          },
                          {
                            "attributes": {
                              "hexvalue": "4b6f6c6c61746572616c4c697175696469747950726f78793a207472616e7366657220746f20696e766f6b6572206661696c6564",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "token": "string",
                              "type": "literal_string \"KollateralLiquidityProxy: transfer to invoker failed\"",
                              "value": "KollateralLiquidityProxy: transfer to invoker failed"
                            },
                            "id": 3455,
                            "name": "Literal",
                            "src": "3459:54:25"
                          }
                        ],
                        "id": 3456,
                        "name": "FunctionCall",
                        "src": "3284:239:25"
                      }
                    ],
                    "id": 3457,
                    "name": "ExpressionStatement",
                    "src": "3284:239:25"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        3459
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "invoker",
                          "scope": 3469,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "contract IInvoker",
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "IInvoker",
                              "referencedDeclaration": 1234,
                              "type": "contract IInvoker"
                            },
                            "id": 3458,
                            "name": "UserDefinedTypeName",
                            "src": "3534:8:25"
                          }
                        ],
                        "id": 3459,
                        "name": "VariableDeclaration",
                        "src": "3534:16:25"
                      },
                      {
                        "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": 3460,
                            "name": "Identifier",
                            "src": "3553:8:25"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3249,
                              "type": "address payable",
                              "value": "_scheduleInvokerAddress"
                            },
                            "id": 3461,
                            "name": "Identifier",
                            "src": "3562:23:25"
                          }
                        ],
                        "id": 3462,
                        "name": "FunctionCall",
                        "src": "3553:33:25"
                      }
                    ],
                    "id": 3463,
                    "name": "VariableDeclarationStatement",
                    "src": "3534:52:25"
                  },
                  {
                    "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": 3459,
                                  "type": "contract IInvoker",
                                  "value": "invoker"
                                },
                                "id": 3464,
                                "name": "Identifier",
                                "src": "3596:7:25"
                              }
                            ],
                            "id": 3466,
                            "name": "MemberAccess",
                            "src": "3596:22:25"
                          }
                        ],
                        "id": 3467,
                        "name": "FunctionCall",
                        "src": "3596:24:25"
                      }
                    ],
                    "id": 3468,
                    "name": "ExpressionStatement",
                    "src": "3596:24:25"
                  }
                ],
                "id": 3469,
                "name": "Block",
                "src": "3140:487:25"
              }
            ],
            "id": 3470,
            "name": "FunctionDefinition",
            "src": "3076:551:25"
          },
          {
            "attributes": {
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "poolAddress",
              "scope": 3516,
              "stateMutability": "view",
              "virtual": false,
              "visibility": "internal"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "tokenAddress",
                      "scope": 3482,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 3471,
                        "name": "ElementaryTypeName",
                        "src": "3654:7:25"
                      }
                    ],
                    "id": 3472,
                    "name": "VariableDeclaration",
                    "src": "3654:20:25"
                  }
                ],
                "id": 3473,
                "name": "ParameterList",
                "src": "3653:22:25"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "",
                      "scope": 3482,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 3474,
                        "name": "ElementaryTypeName",
                        "src": "3699:7:25"
                      }
                    ],
                    "id": 3475,
                    "name": "VariableDeclaration",
                    "src": "3699:7:25"
                  }
                ],
                "id": 3476,
                "name": "ParameterList",
                "src": "3698:9:25"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "functionReturnParameters": 3476
                    },
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "type": "address"
                        },
                        "children": [
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3247,
                              "type": "mapping(address => address)",
                              "value": "_tokenAddressToKTokenAddress"
                            },
                            "id": 3477,
                            "name": "Identifier",
                            "src": "3725:28:25"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3472,
                              "type": "address",
                              "value": "tokenAddress"
                            },
                            "id": 3478,
                            "name": "Identifier",
                            "src": "3754:12:25"
                          }
                        ],
                        "id": 3479,
                        "name": "IndexAccess",
                        "src": "3725:42:25"
                      }
                    ],
                    "id": 3480,
                    "name": "Return",
                    "src": "3718:49:25"
                  }
                ],
                "id": 3481,
                "name": "Block",
                "src": "3708:66:25"
              }
            ],
            "id": 3482,
            "name": "FunctionDefinition",
            "src": "3633:141:25"
          },
          {
            "attributes": {
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "isRegistered",
              "scope": 3516,
              "stateMutability": "view",
              "virtual": false,
              "visibility": "internal"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "tokenAddress",
                      "scope": 3499,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 3483,
                        "name": "ElementaryTypeName",
                        "src": "3802:7:25"
                      }
                    ],
                    "id": 3484,
                    "name": "VariableDeclaration",
                    "src": "3802:20:25"
                  }
                ],
                "id": 3485,
                "name": "ParameterList",
                "src": "3801:22:25"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "",
                      "scope": 3499,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bool",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bool",
                          "type": "bool"
                        },
                        "id": 3486,
                        "name": "ElementaryTypeName",
                        "src": "3847:4:25"
                      }
                    ],
                    "id": 3487,
                    "name": "VariableDeclaration",
                    "src": "3847:4:25"
                  }
                ],
                "id": 3488,
                "name": "ParameterList",
                "src": "3846:6:25"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "functionReturnParameters": 3488
                    },
                    "children": [
                      {
                        "attributes": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "!=",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "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": 3482,
                                  "type": "function (address) view returns (address)",
                                  "value": "poolAddress"
                                },
                                "id": 3489,
                                "name": "Identifier",
                                "src": "3870:11:25"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 3484,
                                  "type": "address",
                                  "value": "tokenAddress"
                                },
                                "id": 3490,
                                "name": "Identifier",
                                "src": "3882:12:25"
                              }
                            ],
                            "id": 3491,
                            "name": "FunctionCall",
                            "src": "3870:25:25"
                          },
                          {
                            "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": 3492,
                                    "name": "ElementaryTypeName",
                                    "src": "3899:7:25"
                                  }
                                ],
                                "id": 3493,
                                "name": "ElementaryTypeNameExpression",
                                "src": "3899:7:25"
                              },
                              {
                                "attributes": {
                                  "hexvalue": "30",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "token": "number",
                                  "type": "int_const 0",
                                  "value": "0"
                                },
                                "id": 3494,
                                "name": "Literal",
                                "src": "3907:1:25"
                              }
                            ],
                            "id": 3495,
                            "name": "FunctionCall",
                            "src": "3899:10:25"
                          }
                        ],
                        "id": 3496,
                        "name": "BinaryOperation",
                        "src": "3870:39:25"
                      }
                    ],
                    "id": 3497,
                    "name": "Return",
                    "src": "3863:46:25"
                  }
                ],
                "id": 3498,
                "name": "Block",
                "src": "3853:63:25"
              }
            ],
            "id": 3499,
            "name": "FunctionDefinition",
            "src": "3780:136:25"
          },
          {
            "attributes": {
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "isPaused",
              "scope": 3516,
              "stateMutability": "view",
              "virtual": false,
              "visibility": "internal"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "tokenAddress",
                      "scope": 3515,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 3500,
                        "name": "ElementaryTypeName",
                        "src": "3940:7:25"
                      }
                    ],
                    "id": 3501,
                    "name": "VariableDeclaration",
                    "src": "3940:20:25"
                  }
                ],
                "id": 3502,
                "name": "ParameterList",
                "src": "3939:22:25"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "",
                      "scope": 3515,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bool",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bool",
                          "type": "bool"
                        },
                        "id": 3503,
                        "name": "ElementaryTypeName",
                        "src": "3985:4:25"
                      }
                    ],
                    "id": 3504,
                    "name": "VariableDeclaration",
                    "src": "3985:4:25"
                  }
                ],
                "id": 3505,
                "name": "ParameterList",
                "src": "3984:6:25"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "functionReturnParameters": 3505
                    },
                    "children": [
                      {
                        "attributes": {
                          "arguments": [
                            null
                          ],
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "bool",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                null
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "paused",
                              "referencedDeclaration": 6201,
                              "type": "function () view external returns (bool)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "tryCall": false,
                                  "type": "contract Pausable",
                                  "type_conversion": true
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      ],
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 6255,
                                      "type": "type(contract Pausable)",
                                      "value": "Pausable"
                                    },
                                    "id": 3506,
                                    "name": "Identifier",
                                    "src": "4008:8:25"
                                  },
                                  {
                                    "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": 3482,
                                          "type": "function (address) view returns (address)",
                                          "value": "poolAddress"
                                        },
                                        "id": 3507,
                                        "name": "Identifier",
                                        "src": "4017:11:25"
                                      },
                                      {
                                        "attributes": {
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 3501,
                                          "type": "address",
                                          "value": "tokenAddress"
                                        },
                                        "id": 3508,
                                        "name": "Identifier",
                                        "src": "4029:12:25"
                                      }
                                    ],
                                    "id": 3509,
                                    "name": "FunctionCall",
                                    "src": "4017:25:25"
                                  }
                                ],
                                "id": 3510,
                                "name": "FunctionCall",
                                "src": "4008:35:25"
                              }
                            ],
                            "id": 3511,
                            "name": "MemberAccess",
                            "src": "4008:42:25"
                          }
                        ],
                        "id": 3512,
                        "name": "FunctionCall",
                        "src": "4008:44:25"
                      }
                    ],
                    "id": 3513,
                    "name": "Return",
                    "src": "4001:51:25"
                  }
                ],
                "id": 3514,
                "name": "Block",
                "src": "3991:68:25"
              }
            ],
            "id": 3515,
            "name": "FunctionDefinition",
            "src": "3922:137:25"
          }
        ],
        "id": 3516,
        "name": "ContractDefinition",
        "src": "976:3085:25"
      }
    ],
    "id": 3517,
    "name": "SourceUnit",
    "src": "640:3422:25"
  },
  "compiler": {
    "name": "solc",
    "version": "0.7.3+commit.9bfce1f6.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.3.3",
  "updatedAt": "2021-02-01T23:13:33.232Z",
  "devdoc": {
    "kind": "dev",
    "methods": {
      "owner()": {
        "details": "Returns the address of the current owner."
      },
      "renounceOwnership()": {
        "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner."
      },
      "transferOwnership(address)": {
        "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."
      }
    },
    "version": 1
  },
  "userdoc": {
    "kind": "user",
    "methods": {},
    "version": 1
  }
}