{
  "contractName": "Invoker",
  "abi": [
    {
      "inputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "invokeAddress",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "invokeDataHash",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "kTokenAddress",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "tokenAmount",
          "type": "uint256"
        }
      ],
      "name": "Invocation",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "Paused",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "PauserAdded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "PauserRemoved",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "poolReward",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "platformReward",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "tokenAddress",
          "type": "address"
        }
      ],
      "name": "Reward",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "Unpaused",
      "type": "event"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "addPauser",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "isOwner",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "isPauser",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "pause",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "paused",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "renouncePauser",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "unpause",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "invokeAddress",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "invokeData",
          "type": "bytes"
        },
        {
          "internalType": "address",
          "name": "kTokenAddress",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenAmount",
          "type": "uint256"
        }
      ],
      "name": "invoke",
      "outputs": [],
      "payable": true,
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "poolReward",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "platformReward",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "currentTokenAmount",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "currentExpectedBalance",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "currentKTokenAddress",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "currentTokenAddress",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "kTokenAddress",
          "type": "address"
        }
      ],
      "name": "registerKToken",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "poolRewardBips",
          "type": "uint256"
        }
      ],
      "name": "setPoolReward",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "platformRewardBips",
          "type": "uint256"
        }
      ],
      "name": "setPlatformReward",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "platformVaultAddress",
          "type": "address"
        }
      ],
      "name": "setPlatformVaultAddress",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.5.16+commit.9c3226ce\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"invokeAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"invokeDataHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"kTokenAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokenAmount\",\"type\":\"uint256\"}],\"name\":\"Invocation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"PauserAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"PauserRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"poolReward\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"platformReward\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"}],\"name\":\"Reward\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"addPauser\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"currentExpectedBalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"currentKTokenAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"currentTokenAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"currentTokenAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"invokeAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"invokeData\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"kTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenAmount\",\"type\":\"uint256\"}],\"name\":\"invoke\",\"outputs\":[],\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"isOwner\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isPauser\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"platformReward\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"poolReward\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"kTokenAddress\",\"type\":\"address\"}],\"name\":\"registerKToken\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"renouncePauser\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"platformRewardBips\",\"type\":\"uint256\"}],\"name\":\"setPlatformReward\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"platformVaultAddress\",\"type\":\"address\"}],\"name\":\"setPlatformVaultAddress\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolRewardBips\",\"type\":\"uint256\"}],\"name\":\"setPoolReward\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"methods\":{\"isOwner()\":{\"details\":\"Returns true if the caller is the current owner.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"pause()\":{\"details\":\"Called by a pauser to pause, triggers stopped state.\"},\"paused()\":{\"details\":\"Returns true if the contract is paused, and false otherwise.\"},\"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.\"},\"unpause()\":{\"details\":\"Called by a pauser to unpause, returns to normal state.\"}}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"/Users/kbrizzle/code/kollateral/protocol/contracts/Invoker.sol\":\"Invoker\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"/Users/kbrizzle/code/kollateral/protocol/contracts/ExtendedMath.sol\":{\"keccak256\":\"0x9b4a67b1242134b64f557613259bfb51268d488cbc7b27cb2bc72c2f21f2b71f\",\"urls\":[\"bzz-raw://47bc3f04cddcbbe7a0373a074d50bbc1720ef7d73266532aab07474ea426ab43\",\"dweb:/ipfs/QmdPdivc8yXbmvDL1nG8xXHJF7qcfx6JqQoCFBv1ohDmdP\"]},\"/Users/kbrizzle/code/kollateral/protocol/contracts/Invoker.sol\":{\"keccak256\":\"0xc6c6e31ef43758db90ef5f21ff27519ea736f40088abf4b635ac29ba658eb784\",\"urls\":[\"bzz-raw://50968c9a288e9c44d61a1912fc3a44c57fc6c07ab564be99e1b3395c89583b0d\",\"dweb:/ipfs/QmNeN8jTLcwx31J6vyxdgS2e5uyToZNstWWQ28xAK6kEAU\"]},\"/Users/kbrizzle/code/kollateral/protocol/contracts/KToken.sol\":{\"keccak256\":\"0x748a3edca97018638a9ed18f3484977c124517f2261af8a7be3e1b8ee2fbe8a8\",\"urls\":[\"bzz-raw://9b5d42beda89cdf788e79cec733d96c4c4eaf896694948ee2c0fa5bb46d3972c\",\"dweb:/ipfs/Qmc9sGpHe3CTiEG9gzrdHtCgsuHBfAToTBGYmL8a4JL3J1\"]},\"/Users/kbrizzle/code/kollateral/protocol/contracts/interfaces/IInvoker.sol\":{\"keccak256\":\"0x8ad397e0611b31884a19bed7b27712530efb95ecf032fc8b8e0c25f4d3190569\",\"urls\":[\"bzz-raw://b23aa7fa654935abb0286ceac8eaf281589b866b75f0cc5b2d8971e1378e98c1\",\"dweb:/ipfs/QmVqYaxBEQVGfXUXVSFXaG6ZfFz5dEwkjDoMprZqbLAnyN\"]},\"/Users/kbrizzle/code/kollateral/protocol/contracts/interfaces/IKToken.sol\":{\"keccak256\":\"0x5b03d279a41856eef739da4ee50155425bbd95d99d80e4b910ec5abb91a99e40\",\"urls\":[\"bzz-raw://4ef7259b5604ef20e62b2503bc34d4052f99b85a18a80b072b8883bb7f9559de\",\"dweb:/ipfs/QmUsVQH9M3FoB4rpJGZJpZrbk2kcDFyRg5E5WfAKqHYkok\"]},\"@openzeppelin/contracts/GSN/Context.sol\":{\"keccak256\":\"0x90a3995645af7562d84b9d69363ffa5ae7217714ab61e951bf7bc450f40e4061\",\"urls\":[\"bzz-raw://216ef9d6b614db4eb46970b4e84903f2534a45572dd30a79f0041f1a5830f436\",\"dweb:/ipfs/QmNPrJ4MWKUAWzKXpUqeyKRUfosaoANZAqXgvepdrCwZAG\"]},\"@openzeppelin/contracts/access/Roles.sol\":{\"keccak256\":\"0xb002c378d7b82a101bd659c341518953ca0919d342c0a400196982c0e7e7bcdb\",\"urls\":[\"bzz-raw://00a788c4631466c220b385bdd100c571d24b2deccd657615cfbcef6cadf669a4\",\"dweb:/ipfs/QmTEwDbjJNxmMNCDMqtuou3dyM8Wtp8Q9NFvn7SAVM7Jf3\"]},\"@openzeppelin/contracts/access/roles/PauserRole.sol\":{\"keccak256\":\"0xd1b5c934bab36d753c22987ad98c7614cb50ebf641371a83c96f8138619d7c30\",\"urls\":[\"bzz-raw://69c4bb822caae3d1bfd38e81f03b6d618d4d83cbb8e9f8236d28e1c4fe1d0d81\",\"dweb:/ipfs/QmWamstbFhdySmocF2TSKYVLLZF24JG4aXMvHiRdWKv3RA\"]},\"@openzeppelin/contracts/lifecycle/Pausable.sol\":{\"keccak256\":\"0xd3e5a49edfb74654d122962cc60b917d1c60461e669a7262fd7aba201fac1260\",\"urls\":[\"bzz-raw://0307a3cae4df037aee16fb0b0d94849cb4d9b20d7d7182c185f3efac6d2caec0\",\"dweb:/ipfs/QmezTANBfrJmCvxfmfyfcfFGtbcUEUtoJCjfxKnAePiNoE\"]},\"@openzeppelin/contracts/math/SafeMath.sol\":{\"keccak256\":\"0x640b6dee7a4b830bdfd52b5031a07fc2b12209f5b2e29e5d364a7d37f69d8076\",\"urls\":[\"bzz-raw://31113152e1ddb78fe7a4197f247591ca894e93f916867beb708d8e747b6cc74f\",\"dweb:/ipfs/QmbZaJyXdpsYGykVhHH9qpVGQg9DGCxE2QufbCUy3daTgq\"]},\"@openzeppelin/contracts/ownership/Ownable.sol\":{\"keccak256\":\"0xecd8ab29d9a5771c3964d0cd1788c4a5098a0081b20fb275da850a22b1c59806\",\"urls\":[\"bzz-raw://696a75bc2c55407ce8251ccc7d19ecb1b7b2be1796a160a6524312babcc7e3d4\",\"dweb:/ipfs/QmQViKEp3y99h9uhRssE29TmjBKRnFMaoz3eJZ4eggggg2\"]},\"@openzeppelin/contracts/token/ERC20/ERC20.sol\":{\"keccak256\":\"0x65a4078c03875c25413a068ce9cfdd7e68a90f8786612d1189c89341e6e3b802\",\"urls\":[\"bzz-raw://45c0d95495b944fbb1aa09d900b0ab530903a432125ab8fddfa05064a7988991\",\"dweb:/ipfs/Qma2VeknkKA1THeubGzshWFk44BktXkXP1UKp9Un2uDSsu\"]},\"@openzeppelin/contracts/token/ERC20/ERC20Detailed.sol\":{\"keccak256\":\"0x4a3a810b7ebe742e897e1fd428b3eeed2196d3acea58eaf9c566ed10d545d2ed\",\"urls\":[\"bzz-raw://28d03f328e19e4099d5013de0649afaeaabac1a614e130767ab1cb4aca9775b6\",\"dweb:/ipfs/Qmb9iW7yNuYehB2NfhRMs9TakqbLVQhBhmGMkaDZ5g1Eb4\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xe5bb0f57cff3e299f360052ba50f1ea0fff046df2be070b6943e0e3c3fdad8a9\",\"urls\":[\"bzz-raw://59fd025151435da35faa8093a5c7a17de02de9d08ad27275c5cdf05050820d91\",\"dweb:/ipfs/QmQMvwEcPhoRXzbXyrdoeRtvLoifUW9Qh7Luho7bmUPRkc\"]},\"@openzeppelin/contracts/utils/ReentrancyGuard.sol\":{\"keccak256\":\"0xe86fdc15fbc379ecf14d6aa4f51b87c0be8476e114e23c171b790a6717230655\",\"urls\":[\"bzz-raw://81905037f66d37ed211a4e3430af74f36e18b3a5d5b688e6d7d5ee199824a41a\",\"dweb:/ipfs/QmTcpgNKqLVRbcgNSUHazAbVf2bz5uh5mPkAijGeYW7Sqb\"]}},\"version\":1}",
  "bytecode": "0x60806040523480156200001157600080fd5b5060016000819055506200003a6200002e6200012860201b60201c565b6200013060201b60201c565b6000600260006101000a81548160ff021916908315150217905550620000656200012860201b60201c565b600260016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a362000355565b600033905090565b6200014b8160016200019160201b620021241790919060201c565b8073ffffffffffffffffffffffffffffffffffffffff167f6719d08c1888103bea251a4ed56406bd0c3e69723c8a1686e017e7bbe159b6f860405160405180910390a250565b620001a382826200027560201b60201c565b1562000217576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f526f6c65733a206163636f756e7420616c72656164792068617320726f6c650081525060200191505060405180910390fd5b60018260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620002fe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180620028036022913960400191505060405180910390fd5b8260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61249e80620003656000396000f3fe60806040526004361061012a5760003560e01c806382dc1ec4116100ab578063b25515891161006f578063b255158914610522578063f2fde38b14610573578063f35a37aa146105c4578063fe6551b6146105ff578063fef10b951461062a578063ff69ac36146106555761012a565b806382dc1ec4146103dd5780638456cb591461042e5780638da5cb5b146104455780638f32d59b1461049c5780639534eaea146104cb5761012a565b80633f4ba83a116100f25780633f4ba83a1461030057806346fbf68e146103175780635c975abb146103805780636ef8d66d146103af578063715018a6146103c65761012a565b8063046e79131461012f5780630d4f992a1461016a5780630e02e6a3146101bb57806311eefd5d1461027e5780631e4ede1f146102d5575b600080fd5b34801561013b57600080fd5b506101686004803603602081101561015257600080fd5b8101908080359060200190929190505050610680565b005b34801561017657600080fd5b506101b96004803603602081101561018d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610704565b005b61027c600480360360808110156101d157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561020e57600080fd5b82018360208201111561022057600080fd5b8035906020019184600183028401116401000000008311171561024257600080fd5b9091929391929390803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610885565b005b34801561028a57600080fd5b50610293611391565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156102e157600080fd5b506102ea61141a565b6040518082815260200191505060405180910390f35b34801561030c57600080fd5b50610315611424565b005b34801561032357600080fd5b506103666004803603602081101561033a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611592565b604051808215151515815260200191505060405180910390f35b34801561038c57600080fd5b506103956115af565b604051808215151515815260200191505060405180910390f35b3480156103bb57600080fd5b506103c46115c6565b005b3480156103d257600080fd5b506103db6115d8565b005b3480156103e957600080fd5b5061042c6004803603602081101561040057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611713565b005b34801561043a57600080fd5b50610443611784565b005b34801561045157600080fd5b5061045a6118f3565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156104a857600080fd5b506104b161191d565b604051808215151515815260200191505060405180910390f35b3480156104d757600080fd5b506104e061197c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561052e57600080fd5b506105716004803603602081101561054557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506119a6565b005b34801561057f57600080fd5b506105c26004803603602081101561059657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611a64565b005b3480156105d057600080fd5b506105fd600480360360208110156105e757600080fd5b8101908080359060200190929190505050611aea565b005b34801561060b57600080fd5b50610614611b6e565b6040518082815260200191505060405180910390f35b34801561063657600080fd5b5061063f611b78565b6040518082815260200191505060405180910390f35b34801561066157600080fd5b5061066a611b82565b6040518082815260200191505060405180910390f35b61068861191d565b6106fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8060048190555050565b61070c61191d565b61077e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60008190508073ffffffffffffffffffffffffffffffffffffffff16639d76ea586040518163ffffffff1660e01b815260040160206040518083038186803b1580156107c957600080fd5b505afa1580156107dd573d6000803e3d6000fd5b505050506040513d60208110156107f357600080fd5b8101908080519060200190929190505050600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b60016000808282540192505081905550600080549050600260009054906101000a900460ff161561091e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614156109a3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806123176024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a87576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806124166029913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610b6c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602481526020018061238e6024913960400191505060405180910390fd5b600083905060008173ffffffffffffffffffffffffffffffffffffffff16634c68df676040518163ffffffff1660e01b815260040160206040518083038186803b158015610bb957600080fd5b505afa158015610bcd573d6000803e3d6000fd5b505050506040513d6020811015610be357600080fd5b81019080805190602001909291905050509050610c008185611b8c565b60088190555084600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550836007819055508173ffffffffffffffffffffffffffffffffffffffff1663336d269289866040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015610cd557600080fd5b505af1158015610ce9573d6000803e3d6000fd5b505050506040513d6020811015610cff57600080fd5b8101908080519060200190929190505050610d65576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d815260200180612361602d913960400191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663f83d08ba6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610dad57600080fd5b505af1158015610dc1573d6000803e3d6000fd5b50505050600060608973ffffffffffffffffffffffffffffffffffffffff16348a8a60405180838380828437808301925050509250505060006040518083038185875af1925050503d8060008114610e35576040519150601f19603f3d011682016040523d82523d6000602084013e610e3a565b606091505b5091509150818190610ee7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610eac578082015181840152602081019050610e91565b50505050905090810190601f168015610ed95780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b507f941e2b1923c24ce0f5470b66d9f7e7da859186ff3a22988205497e998feb5c328a8a8a60405180838380828437808301925050509250505060405180910390208989604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200194505050505060405180910390a18373ffffffffffffffffffffffffffffffffffffffff1663a69df4b56040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610ff557600080fd5b505af1158015611009573d6000803e3d6000fd5b5050505060008473ffffffffffffffffffffffffffffffffffffffff16634c68df676040518163ffffffff1660e01b815260040160206040518083038186803b15801561105557600080fd5b505afa158015611069573d6000803e3d6000fd5b505050506040513d602081101561107f57600080fd5b8101908080519060200190929190505050905080600854146110ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806122c66021913960400191505060405180910390fd5b60006110f788611bcb565b90508573ffffffffffffffffffffffffffffffffffffffff1663336d2692600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156111a257600080fd5b505af11580156111b6573d6000803e3d6000fd5b505050506040513d60208110156111cc57600080fd5b8101908080519060200190929190505050611232576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b81526020018061243f602b913960400191505060405180910390fd5b7faab4527149d32aa1e134471eee25c0c019ab961e93f6604ca89353c17a3eb60f61125c89611bfd565b82600360008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16604051808481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001935050505060405180910390a15050505050506000548114611389576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b505050505050565b600060036000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600854905090565b61143461142f611c2f565b611592565b611489576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260308152602001806122e76030913960400191505060405180910390fd5b600260009054906101000a900460ff1661150b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f5061757361626c653a206e6f742070617573656400000000000000000000000081525060200191505060405180910390fd5b6000600260006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa61154f611c2f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1565b60006115a8826001611c3790919063ffffffff16565b9050919050565b6000600260009054906101000a900460ff16905090565b6115d66115d1611c2f565b611d15565b565b6115e061191d565b611652576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600260016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b61172361171e611c2f565b611592565b611778576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260308152602001806122e76030913960400191505060405180910390fd5b61178181611d6f565b50565b61179461178f611c2f565b611592565b6117e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260308152602001806122e76030913960400191505060405180910390fd5b600260009054906101000a900460ff161561186c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b6001600260006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586118b0611c2f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1565b6000600260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611960611c2f565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6119ae61191d565b611a20576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611a6c61191d565b611ade576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b611ae781611dc9565b50565b611af261191d565b611b64576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8060058190555050565b6000600554905090565b6000600454905090565b6000600754905090565b6000611bc3611b9a83611bcb565b611bb5611ba685611bfd565b86611f0f90919063ffffffff16565b611f0f90919063ffffffff16565b905092915050565b6000611bf6612710611be860055485611f9790919063ffffffff16565b61201d90919063ffffffff16565b9050919050565b6000611c28612710611c1a60045485611f9790919063ffffffff16565b61201d90919063ffffffff16565b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611cbe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806123f46022913960400191505060405180910390fd5b8260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611d2981600161206790919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167fcd265ebaf09df2871cc7bd4133404a235ba12eff2041bb89d9c714a2621c7c7e60405160405180910390a250565b611d8381600161212490919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167f6719d08c1888103bea251a4ed56406bd0c3e69723c8a1686e017e7bbe159b6f860405160405180910390a250565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611e4f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061233b6026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600260016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600080828401905083811015611f8d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600080831415611faa5760009050612017565b6000828402905082848281611fbb57fe5b0414612012576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806123d36021913960400191505060405180910390fd5b809150505b92915050565b600061205f83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506121ff565b905092915050565b6120718282611c37565b6120c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806123b26021913960400191505060405180910390fd5b60008260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61212e8282611c37565b156121a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f526f6c65733a206163636f756e7420616c72656164792068617320726f6c650081525060200191505060405180910390fd5b60018260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600080831182906122ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612270578082015181840152602081019050612255565b50505050905090810190601f16801561229d5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385816122b757fe5b04905080915050939250505056fe496e766f6b65723a20696e636f727265637420656e64696e672062616c616e6365506175736572526f6c653a2063616c6c657220646f6573206e6f742068617665207468652050617573657220726f6c65496e766f6b65723a2063616e6e6f7420696e766f6b65207468697320636f6e74726163744f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373496e766f6b65723a20756e61626c6520746f207472616e7366657220696e766f636174696f6e20616d6f756e74496e766f6b65723a206b546f6b656e206d757374206265656e2072656769737465726564526f6c65733a206163636f756e7420646f6573206e6f74206861766520726f6c65536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77526f6c65733a206163636f756e7420697320746865207a65726f2061646472657373496e766f6b65723a2063616e6e6f7420696e766f6b6520616e206b546f6b656e20636f6e7472616374496e766f6b65723a20756e61626c6520746f207472616e7366657220706c6174666f726d20726577617264a265627a7a72315820a8f3b3c09a0401291896a480aa3deeb49765e9028b63ce80b71f42cc54241c6e64736f6c63430005100032526f6c65733a206163636f756e7420697320746865207a65726f2061646472657373",
  "deployedBytecode": "0x60806040526004361061012a5760003560e01c806382dc1ec4116100ab578063b25515891161006f578063b255158914610522578063f2fde38b14610573578063f35a37aa146105c4578063fe6551b6146105ff578063fef10b951461062a578063ff69ac36146106555761012a565b806382dc1ec4146103dd5780638456cb591461042e5780638da5cb5b146104455780638f32d59b1461049c5780639534eaea146104cb5761012a565b80633f4ba83a116100f25780633f4ba83a1461030057806346fbf68e146103175780635c975abb146103805780636ef8d66d146103af578063715018a6146103c65761012a565b8063046e79131461012f5780630d4f992a1461016a5780630e02e6a3146101bb57806311eefd5d1461027e5780631e4ede1f146102d5575b600080fd5b34801561013b57600080fd5b506101686004803603602081101561015257600080fd5b8101908080359060200190929190505050610680565b005b34801561017657600080fd5b506101b96004803603602081101561018d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610704565b005b61027c600480360360808110156101d157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561020e57600080fd5b82018360208201111561022057600080fd5b8035906020019184600183028401116401000000008311171561024257600080fd5b9091929391929390803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610885565b005b34801561028a57600080fd5b50610293611391565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156102e157600080fd5b506102ea61141a565b6040518082815260200191505060405180910390f35b34801561030c57600080fd5b50610315611424565b005b34801561032357600080fd5b506103666004803603602081101561033a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611592565b604051808215151515815260200191505060405180910390f35b34801561038c57600080fd5b506103956115af565b604051808215151515815260200191505060405180910390f35b3480156103bb57600080fd5b506103c46115c6565b005b3480156103d257600080fd5b506103db6115d8565b005b3480156103e957600080fd5b5061042c6004803603602081101561040057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611713565b005b34801561043a57600080fd5b50610443611784565b005b34801561045157600080fd5b5061045a6118f3565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156104a857600080fd5b506104b161191d565b604051808215151515815260200191505060405180910390f35b3480156104d757600080fd5b506104e061197c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561052e57600080fd5b506105716004803603602081101561054557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506119a6565b005b34801561057f57600080fd5b506105c26004803603602081101561059657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611a64565b005b3480156105d057600080fd5b506105fd600480360360208110156105e757600080fd5b8101908080359060200190929190505050611aea565b005b34801561060b57600080fd5b50610614611b6e565b6040518082815260200191505060405180910390f35b34801561063657600080fd5b5061063f611b78565b6040518082815260200191505060405180910390f35b34801561066157600080fd5b5061066a611b82565b6040518082815260200191505060405180910390f35b61068861191d565b6106fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8060048190555050565b61070c61191d565b61077e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60008190508073ffffffffffffffffffffffffffffffffffffffff16639d76ea586040518163ffffffff1660e01b815260040160206040518083038186803b1580156107c957600080fd5b505afa1580156107dd573d6000803e3d6000fd5b505050506040513d60208110156107f357600080fd5b8101908080519060200190929190505050600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b60016000808282540192505081905550600080549050600260009054906101000a900460ff161561091e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614156109a3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806123176024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a87576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806124166029913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610b6c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602481526020018061238e6024913960400191505060405180910390fd5b600083905060008173ffffffffffffffffffffffffffffffffffffffff16634c68df676040518163ffffffff1660e01b815260040160206040518083038186803b158015610bb957600080fd5b505afa158015610bcd573d6000803e3d6000fd5b505050506040513d6020811015610be357600080fd5b81019080805190602001909291905050509050610c008185611b8c565b60088190555084600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550836007819055508173ffffffffffffffffffffffffffffffffffffffff1663336d269289866040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015610cd557600080fd5b505af1158015610ce9573d6000803e3d6000fd5b505050506040513d6020811015610cff57600080fd5b8101908080519060200190929190505050610d65576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d815260200180612361602d913960400191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663f83d08ba6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610dad57600080fd5b505af1158015610dc1573d6000803e3d6000fd5b50505050600060608973ffffffffffffffffffffffffffffffffffffffff16348a8a60405180838380828437808301925050509250505060006040518083038185875af1925050503d8060008114610e35576040519150601f19603f3d011682016040523d82523d6000602084013e610e3a565b606091505b5091509150818190610ee7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610eac578082015181840152602081019050610e91565b50505050905090810190601f168015610ed95780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b507f941e2b1923c24ce0f5470b66d9f7e7da859186ff3a22988205497e998feb5c328a8a8a60405180838380828437808301925050509250505060405180910390208989604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200194505050505060405180910390a18373ffffffffffffffffffffffffffffffffffffffff1663a69df4b56040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610ff557600080fd5b505af1158015611009573d6000803e3d6000fd5b5050505060008473ffffffffffffffffffffffffffffffffffffffff16634c68df676040518163ffffffff1660e01b815260040160206040518083038186803b15801561105557600080fd5b505afa158015611069573d6000803e3d6000fd5b505050506040513d602081101561107f57600080fd5b8101908080519060200190929190505050905080600854146110ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806122c66021913960400191505060405180910390fd5b60006110f788611bcb565b90508573ffffffffffffffffffffffffffffffffffffffff1663336d2692600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156111a257600080fd5b505af11580156111b6573d6000803e3d6000fd5b505050506040513d60208110156111cc57600080fd5b8101908080519060200190929190505050611232576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b81526020018061243f602b913960400191505060405180910390fd5b7faab4527149d32aa1e134471eee25c0c019ab961e93f6604ca89353c17a3eb60f61125c89611bfd565b82600360008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16604051808481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001935050505060405180910390a15050505050506000548114611389576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b505050505050565b600060036000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600854905090565b61143461142f611c2f565b611592565b611489576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260308152602001806122e76030913960400191505060405180910390fd5b600260009054906101000a900460ff1661150b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f5061757361626c653a206e6f742070617573656400000000000000000000000081525060200191505060405180910390fd5b6000600260006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa61154f611c2f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1565b60006115a8826001611c3790919063ffffffff16565b9050919050565b6000600260009054906101000a900460ff16905090565b6115d66115d1611c2f565b611d15565b565b6115e061191d565b611652576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600260016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b61172361171e611c2f565b611592565b611778576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260308152602001806122e76030913960400191505060405180910390fd5b61178181611d6f565b50565b61179461178f611c2f565b611592565b6117e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260308152602001806122e76030913960400191505060405180910390fd5b600260009054906101000a900460ff161561186c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b6001600260006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586118b0611c2f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1565b6000600260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611960611c2f565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6119ae61191d565b611a20576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611a6c61191d565b611ade576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b611ae781611dc9565b50565b611af261191d565b611b64576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8060058190555050565b6000600554905090565b6000600454905090565b6000600754905090565b6000611bc3611b9a83611bcb565b611bb5611ba685611bfd565b86611f0f90919063ffffffff16565b611f0f90919063ffffffff16565b905092915050565b6000611bf6612710611be860055485611f9790919063ffffffff16565b61201d90919063ffffffff16565b9050919050565b6000611c28612710611c1a60045485611f9790919063ffffffff16565b61201d90919063ffffffff16565b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611cbe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806123f46022913960400191505060405180910390fd5b8260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611d2981600161206790919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167fcd265ebaf09df2871cc7bd4133404a235ba12eff2041bb89d9c714a2621c7c7e60405160405180910390a250565b611d8381600161212490919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167f6719d08c1888103bea251a4ed56406bd0c3e69723c8a1686e017e7bbe159b6f860405160405180910390a250565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611e4f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061233b6026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600260016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600080828401905083811015611f8d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600080831415611faa5760009050612017565b6000828402905082848281611fbb57fe5b0414612012576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806123d36021913960400191505060405180910390fd5b809150505b92915050565b600061205f83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506121ff565b905092915050565b6120718282611c37565b6120c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806123b26021913960400191505060405180910390fd5b60008260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61212e8282611c37565b156121a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f526f6c65733a206163636f756e7420616c72656164792068617320726f6c650081525060200191505060405180910390fd5b60018260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600080831182906122ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612270578082015181840152602081019050612255565b50505050905090810190601f16801561229d5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385816122b757fe5b04905080915050939250505056fe496e766f6b65723a20696e636f727265637420656e64696e672062616c616e6365506175736572526f6c653a2063616c6c657220646f6573206e6f742068617665207468652050617573657220726f6c65496e766f6b65723a2063616e6e6f7420696e766f6b65207468697320636f6e74726163744f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373496e766f6b65723a20756e61626c6520746f207472616e7366657220696e766f636174696f6e20616d6f756e74496e766f6b65723a206b546f6b656e206d757374206265656e2072656769737465726564526f6c65733a206163636f756e7420646f6573206e6f74206861766520726f6c65536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77526f6c65733a206163636f756e7420697320746865207a65726f2061646472657373496e766f6b65723a2063616e6e6f7420696e766f6b6520616e206b546f6b656e20636f6e7472616374496e766f6b65723a20756e61626c6520746f207472616e7366657220706c6174666f726d20726577617264a265627a7a72315820a8f3b3c09a0401291896a480aa3deeb49765e9028b63ce80b71f42cc54241c6e64736f6c63430005100032",
  "sourceMap": "310:5007:1:-;;;1370:25;8:9:-1;5:2;;;30:1;27;20:12;5:2;1370:25:1;879:1:22;863:13;:17;;;;318:24:15;329:12;:10;;;:12;;:::i;:::-;318:10;;;:24;;:::i;:::-;1023:5:16;1013:7;;:15;;;;;;;;;;;;;;;;;;707:12:18;:10;;;:12;;:::i;:::-;698:6;;:21;;;;;;;;;;;;;;;;;;767:6;;;;;;;;;;;734:40;;763:1;734:40;;;;;;;;;;;;310:5007:1;;788:96:13;833:15;867:10;860:17;;788:96;:::o;786:119:15:-;842:21;855:7;842:8;:12;;;;;;:21;;;;:::i;:::-;890:7;878:20;;;;;;;;;;;;786:119;:::o;260:175:14:-;337:18;341:4;347:7;337:3;;;:18;;:::i;:::-;336:19;328:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;424:4;401;:11;;:20;413:7;401:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;260:175;;:::o;779:200::-;851:4;894:1;875:21;;:7;:21;;;;867:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;952:4;:11;;:20;964:7;952:20;;;;;;;;;;;;;;;;;;;;;;;;;945:27;;779:200;;;;:::o;310:5007:1:-;;;;;;;",
  "deployedSourceMap": "310:5007:1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4914:115;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4914:115:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;4914:115:1;;;;;;;;;;;;;;;;;:::i;:::-;;4725:183;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4725:183:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;4725:183:1;;;;;;;;;;;;;;;;;;;:::i;:::-;;1401:2009;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;1401:2009:1;;;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;1401:2009:1;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;1401:2009:1;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;1401:2009:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;4568:124;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4568:124:1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;4334:113;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4334:113:1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1892:117:16;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1892:117:16;;;:::i;:::-;;494:107:15;;8:9:-1;5:2;;;30:1;27;20:12;5:2;494:107:15;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;494:107:15;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;1130:76:16;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1130:76:16;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;703:77:15;;8:9:-1;5:2;;;30:1;27;20:12;5:2;703:77:15;;;:::i;:::-;;1642:137:18;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1642:137:18;;;:::i;:::-;;607:90:15;;8:9:-1;5:2;;;30:1;27;20:12;5:2;607:90:15;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;607:90:15;;;;;;;;;;;;;;;;;;;:::i;:::-;;1687:115:16;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1687:115:16;;;:::i;:::-;;857:77:18;;8:9:-1;5:2;;;30:1;27;20:12;5:2;857:77:18;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;1208:92;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1208:92:18;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;4453:109:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4453:109:1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;5172:143;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5172:143:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;5172:143:1;;;;;;;;;;;;;;;;;;;:::i;:::-;;1928:107:18;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1928:107:18;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1928:107:18;;;;;;;;;;;;;;;;;;;:::i;:::-;;5035:131:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5035:131:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;5035:131:1;;;;;;;;;;;;;;;;;:::i;:::-;;4070:101;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4070:101:1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;3971:93;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3971:93:1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;4223:105;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4223:105:1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;4914:115;1061:9:18;:7;:9::i;:::-;1053:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5008:14:1;4990:15;:32;;;;4914:115;:::o;4725:183::-;1061:9:18;:7;:9::i;:::-;1053:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4801:13:1;4824;4801:37;;4880:6;:19;;;:21;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4880:21:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4880:21:1;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;4880:21:1;;;;;;;;;;;;;;;;4848:14;:29;4863:13;4848:29;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;1117:1:18;4725:183:1;:::o;1401:2009::-;1313:1:22;1296:13;;:18;;;;;;;;;;;1324:20;1347:13;;1324:36;;1359:7:16;;;;;;;;;;;1358:8;1350:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1618:4:1;1593:30;;:13;:30;;;;1585:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1723:1;1682:43;;:14;:29;1697:13;1682:29;;;;;;;;;;;;;;;;;;;;;;;;;:43;;;1674:97;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1830:1;1789:43;;:14;:29;1804:13;1789:29;;;;;;;;;;;;;;;;;;;;;;;;;:43;;;;1781:92;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1884:13;1907;1884:37;;1990:23;2016:6;:19;;;:21;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2016:21:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2016:21:1;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2016:21:1;;;;;;;;;;;;;;;;1990:47;;2073:54;2098:15;2115:11;2073:24;:54::i;:::-;2047:23;:80;;;;2161:13;2137:21;;:37;;;;;;;;;;;;;;;;;;2206:11;2184:19;:33;;;;2328:6;:25;;;2354:13;2369:11;2328:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2328:53:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2328:53:1;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2328:53:1;;;;;;;;;;;;;;;;2320:111;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2492:6;:11;;;:13;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2492:13:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2492:13:1;;;;2556:12;2570:23;2597:13;:18;;2622:9;2633:10;;2597:47;;;;;30:3:-1;22:6;14;1:33;57:3;49:6;45:16;35:26;;2597:47:1;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;2555:89:1;;;;2662:7;2678:10;2654:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;2654:36:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2705:76;2716:13;2741:10;;2731:21;;;;;30:3:-1;22:6;14;1:33;57:3;49:6;45:16;35:26;;2731:21:1;;;;;;;;;;;;;2754:13;2769:11;2705:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2831:6;:13;;;:15;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2831:15:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2831:15:1;;;;2919:21;2943:6;:19;;;:21;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2943:21:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2943:21:1;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2943:21:1;;;;;;;;;;;;;;;;2919:45;;3009:13;2982:23;;:40;2974:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3109:22;3134:36;3158:11;3134:23;:36::i;:::-;3109:61;;3189:6;:25;;;3215:21;;;;;;;;;;;3238:14;3189:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3189:64:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3189:64:1;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;3189:64:1;;;;;;;;;;;;;;;;3181:120;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3316:87;3323:32;3343:11;3323:19;:32::i;:::-;3357:14;3373;:29;3388:13;3373:29;;;;;;;;;;;;;;;;;;;;;;;;;3316:87;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1397:1:16;;;;;;1405:13:22;;1389:12;:29;1381:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1401:2009:1;;;;;;:::o;4568:124::-;4622:7;4648:14;:37;4663:21;;;;;;;;;;;4648:37;;;;;;;;;;;;;;;;;;;;;;;;;4641:44;;4568:124;:::o;4334:113::-;4391:7;4417:23;;4410:30;;4334:113;:::o;1892:117:16:-;395:22:15;404:12;:10;:12::i;:::-;395:8;:22::i;:::-;387:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1550:7:16;;;;;;;;;;;1542:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1960:5;1950:7;;:15;;;;;;;;;;;;;;;;;;1980:22;1989:12;:10;:12::i;:::-;1980:22;;;;;;;;;;;;;;;;;;;;;;1892:117::o;494:107:15:-;550:4;573:21;586:7;573:8;:12;;:21;;;;:::i;:::-;566:28;;494:107;;;:::o;1130:76:16:-;1169:4;1192:7;;;;;;;;;;;1185:14;;1130:76;:::o;703:77:15:-;746:27;760:12;:10;:12::i;:::-;746:13;:27::i;:::-;703:77::o;1642:137:18:-;1061:9;:7;:9::i;:::-;1053:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1740:1;1703:40;;1724:6;;;;;;;;;;;1703:40;;;;;;;;;;;;1770:1;1753:6;;:19;;;;;;;;;;;;;;;;;;1642:137::o;607:90:15:-;395:22;404:12;:10;:12::i;:::-;395:8;:22::i;:::-;387:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;671:19;682:7;671:10;:19::i;:::-;607:90;:::o;1687:115:16:-;395:22:15;404:12;:10;:12::i;:::-;395:8;:22::i;:::-;387:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1359:7:16;;;;;;;;;;;1358:8;1350:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1756:4;1746:7;;:14;;;;;;;;;;;;;;;;;;1775:20;1782:12;:10;:12::i;:::-;1775:20;;;;;;;;;;;;;;;;;;;;;;1687:115::o;857:77:18:-;895:7;921:6;;;;;;;;;;;914:13;;857:77;:::o;1208:92::-;1248:4;1287:6;;;;;;;;;;;1271:22;;:12;:10;:12::i;:::-;:22;;;1264:29;;1208:92;:::o;4453:109:1:-;4508:7;4534:21;;;;;;;;;;;4527:28;;4453:109;:::o;5172:143::-;1061:9:18;:7;:9::i;:::-;1053:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5288:20:1;5264:21;;:44;;;;;;;;;;;;;;;;;;5172:143;:::o;1928:107:18:-;1061:9;:7;:9::i;:::-;1053:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2000:28;2019:8;2000:18;:28::i;:::-;1928:107;:::o;5035:131:1:-;1061:9:18;:7;:9::i;:::-;1053:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5141:18:1;5119:19;:40;;;;5035:131;:::o;4070:101::-;4119:7;4145:19;;4138:26;;4070:101;:::o;3971:93::-;4016:7;4042:15;;4035:22;;3971:93;:::o;4223:105::-;4276:7;4302:19;;4295:26;;4223:105;:::o;3734:231::-;3837:7;3863:95;3921:36;3945:11;3921:23;:36::i;:::-;3863:53;3883:32;3903:11;3883:19;:32::i;:::-;3863:15;:19;;:53;;;;:::i;:::-;:57;;:95;;;;:::i;:::-;3856:102;;3734:231;;;;:::o;3571:157::-;3648:7;3674:47;3715:5;3674:36;3690:19;;3674:11;:15;;:36;;;;:::i;:::-;:40;;:47;;;;:::i;:::-;3667:54;;3571:157;;;:::o;3416:149::-;3489:7;3515:43;3552:5;3515:32;3531:15;;3515:11;:15;;:32;;;;:::i;:::-;:36;;:43;;;;:::i;:::-;3508:50;;3416:149;;;:::o;788:96:13:-;833:15;867:10;860:17;;788:96;:::o;779:200:14:-;851:4;894:1;875:21;;:7;:21;;;;867:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;952:4;:11;;:20;964:7;952:20;;;;;;;;;;;;;;;;;;;;;;;;;945:27;;779:200;;;;:::o;911:127:15:-;970:24;986:7;970:8;:15;;:24;;;;:::i;:::-;1023:7;1009:22;;;;;;;;;;;;911:127;:::o;786:119::-;842:21;855:7;842:8;:12;;:21;;;;:::i;:::-;890:7;878:20;;;;;;;;;;;;786:119;:::o;2136:225:18:-;2229:1;2209:22;;:8;:22;;;;2201:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2318:8;2289:38;;2310:6;;;;;;;;;;;2289:38;;;;;;;;;;;;2346:8;2337:6;;:17;;;;;;;;;;;;;;;;;;2136:225;:::o;834:176:17:-;892:7;911:9;927:1;923;:5;911:17;;951:1;946;:6;;938:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1002:1;995:8;;;834:176;;;;:::o;2159:459::-;2217:7;2463:1;2458;:6;2454:45;;;2487:1;2480:8;;;;2454:45;2509:9;2525:1;2521;:5;2509:17;;2553:1;2548;2544;:5;;;;;;:10;2536:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2610:1;2603:8;;;2159:459;;;;;:::o;3073:130::-;3131:7;3157:39;3161:1;3164;3157:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;3150:46;;3073:130;;;;:::o;510:180:14:-;589:18;593:4;599:7;589:3;:18::i;:::-;581:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;678:5;655:4;:11;;:20;667:7;655:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;510:180;;:::o;260:175::-;337:18;341:4;347:7;337:3;:18::i;:::-;336:19;328:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;424:4;401;:11;;:20;413:7;401:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;260:175;;:::o;3718:338:17:-;3804:7;3901:1;3897;:5;3904:12;3889:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;3889:28:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3927:9;3943:1;3939;:5;;;;;;3927:17;;4048:1;4041:8;;;3718:338;;;;;:::o",
  "source": "pragma solidity ^0.5.0;\n\nimport \"@openzeppelin/contracts/math/SafeMath.sol\";\nimport \"@openzeppelin/contracts/utils/ReentrancyGuard.sol\";\nimport \"@openzeppelin/contracts/ownership/Ownable.sol\";\nimport \"@openzeppelin/contracts/lifecycle/Pausable.sol\";\nimport \"./KToken.sol\";\nimport \"./interfaces/IInvoker.sol\";\n\ncontract Invoker is IInvoker, ReentrancyGuard, Pausable, Ownable {\n    using SafeMath for uint256;\n\n    event Invocation(address invokeAddress, bytes32 invokeDataHash, address kTokenAddress, uint256 tokenAmount);\n    event Reward(uint256 poolReward, uint256 platformReward, address tokenAddress);\n\n    /* Registered kTokens */\n    mapping(address => address) internal _kTokenToToken;\n\n    /* Reward (in bips) distributed to pool per transaction */\n    uint256 internal _poolRewardBips;\n\n    /* Reward (in bips) distributed to platform per transaction */\n    uint256 internal _platformRewardBips;\n\n    /* Address that collects the platform reward disbursements */\n    address internal _platformVaultAddress;\n\n    /* Helper - store called token amount for retrieval */\n    uint256 internal _currentTokenAmount;\n\n    /* Helper - store expected balance for currently executing transaction */\n    uint256 internal _currentExpectedBalance;\n\n    /* Helper - store kToken address for currently executing transaction */\n    address internal _currentKTokenAddress;\n\n    constructor () public { }\n\n    function invoke(address invokeAddress, bytes calldata invokeData, address kTokenAddress, uint256 tokenAmount)\n    external\n    payable\n    nonReentrant\n    whenNotPaused\n    {\n        require(invokeAddress != address(this), \"Invoker: cannot invoke this contract\");\n        require(_kTokenToToken[invokeAddress] == address(0), \"Invoker: cannot invoke an kToken contract\");\n        require(_kTokenToToken[kTokenAddress] != address(0), \"Invoker: kToken must been registered\");\n\n        KToken kToken = KToken(kTokenAddress);\n\n        /* Record starting and expected ending balance */\n        uint256 startingBalance = kToken.totalReserve();\n        _currentExpectedBalance = calculateExpectedBalance(startingBalance, tokenAmount);\n        _currentKTokenAddress = kTokenAddress;\n        _currentTokenAmount = tokenAmount;\n\n        /* Transfer invocation amount of underlying token to caller's invocation address */\n        require(kToken.transferUnderlying(invokeAddress, tokenAmount), \"Invoker: unable to transfer invocation amount\");\n\n        /* Lock kToken to prevent interference */\n        kToken.lock();\n\n        /* Invoke caller's function */\n        (bool success, bytes memory returndata) = invokeAddress.call.value(msg.value)(invokeData);\n        require(success, string(returndata));\n        emit Invocation(invokeAddress, keccak256(invokeData), kTokenAddress, tokenAmount);\n\n        /* Unlock kToken to cleanup */\n        kToken.unlock();\n\n        /* Verify tokens were returned with correct reward */\n        uint256 endingBalance = kToken.totalReserve();\n        require(_currentExpectedBalance == endingBalance, \"Invoker: incorrect ending balance\");\n\n        /* Extract platform reward */\n        uint256 platformReward = calculatePlatformReward(tokenAmount);\n\n        require(kToken.transferUnderlying(_platformVaultAddress, platformReward), \"Invoker: unable to transfer platform reward\");\n        emit Reward(calculatePoolReward(tokenAmount), platformReward, _kTokenToToken[kTokenAddress]);\n    }\n\n    function calculatePoolReward(uint256 tokenAmount) internal view returns (uint256) {\n        return tokenAmount.mul(_poolRewardBips).div(10000);\n    }\n\n    function calculatePlatformReward(uint256 tokenAmount) internal view returns (uint256) {\n        return tokenAmount.mul(_platformRewardBips).div(10000);\n    }\n\n    function calculateExpectedBalance(uint256 startingBalance, uint256 tokenAmount) internal view returns (uint256) {\n        return startingBalance.add(calculatePoolReward(tokenAmount)).add(calculatePlatformReward(tokenAmount));\n    }\n\n    function poolReward() external view returns (uint256) {\n        return _poolRewardBips;\n    }\n\n    function platformReward() external view returns (uint256) {\n        return _platformRewardBips;\n    }\n\n    /* Helper hook for invoked transaction */\n    function currentTokenAmount() external view returns (uint256) {\n        return _currentTokenAmount;\n    }\n\n    function currentExpectedBalance() external view returns (uint256) {\n        return _currentExpectedBalance;\n    }\n\n    function currentKTokenAddress() external view returns (address) {\n        return _currentKTokenAddress;\n    }\n\n    function currentTokenAddress() external view returns (address) {\n        return _kTokenToToken[_currentKTokenAddress];\n    }\n\n    /* ADMIN FUNCTIONS */\n\n    function registerKToken(address kTokenAddress) external onlyOwner {\n        KToken kToken = KToken(kTokenAddress);\n        _kTokenToToken[kTokenAddress] = kToken.tokenAddress();\n    }\n\n    function setPoolReward(uint256 poolRewardBips) external onlyOwner {\n        _poolRewardBips = poolRewardBips;\n    }\n\n    function setPlatformReward(uint256 platformRewardBips) external onlyOwner {\n        _platformRewardBips = platformRewardBips;\n    }\n\n    function setPlatformVaultAddress(address platformVaultAddress) external onlyOwner {\n        _platformVaultAddress = platformVaultAddress;\n    }\n}\n",
  "sourcePath": "/Users/kbrizzle/code/kollateral/protocol/contracts/Invoker.sol",
  "ast": {
    "absolutePath": "/Users/kbrizzle/code/kollateral/protocol/contracts/Invoker.sol",
    "exportedSymbols": {
      "Invoker": [
        421
      ]
    },
    "id": 422,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 43,
        "literals": [
          "solidity",
          "^",
          "0.5",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:1"
      },
      {
        "absolutePath": "@openzeppelin/contracts/math/SafeMath.sol",
        "file": "@openzeppelin/contracts/math/SafeMath.sol",
        "id": 44,
        "nodeType": "ImportDirective",
        "scope": 422,
        "sourceUnit": 2904,
        "src": "25:51:1",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@openzeppelin/contracts/utils/ReentrancyGuard.sol",
        "file": "@openzeppelin/contracts/utils/ReentrancyGuard.sol",
        "id": 45,
        "nodeType": "ImportDirective",
        "scope": 422,
        "sourceUnit": 3582,
        "src": "77:59:1",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@openzeppelin/contracts/ownership/Ownable.sol",
        "file": "@openzeppelin/contracts/ownership/Ownable.sol",
        "id": 46,
        "nodeType": "ImportDirective",
        "scope": 422,
        "sourceUnit": 3018,
        "src": "137:55:1",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@openzeppelin/contracts/lifecycle/Pausable.sol",
        "file": "@openzeppelin/contracts/lifecycle/Pausable.sol",
        "id": 47,
        "nodeType": "ImportDirective",
        "scope": 422,
        "sourceUnit": 2717,
        "src": "193:56:1",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/kbrizzle/code/kollateral/protocol/contracts/KToken.sol",
        "file": "./KToken.sol",
        "id": 48,
        "nodeType": "ImportDirective",
        "scope": 422,
        "sourceUnit": 1117,
        "src": "250:22:1",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/kbrizzle/code/kollateral/protocol/contracts/interfaces/IInvoker.sol",
        "file": "./interfaces/IInvoker.sol",
        "id": 49,
        "nodeType": "ImportDirective",
        "scope": 422,
        "sourceUnit": 1929,
        "src": "273:35:1",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 50,
              "name": "IInvoker",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 1928,
              "src": "330:8:1",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IInvoker_$1928",
                "typeString": "contract IInvoker"
              }
            },
            "id": 51,
            "nodeType": "InheritanceSpecifier",
            "src": "330:8:1"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 52,
              "name": "ReentrancyGuard",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 3581,
              "src": "340:15:1",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ReentrancyGuard_$3581",
                "typeString": "contract ReentrancyGuard"
              }
            },
            "id": 53,
            "nodeType": "InheritanceSpecifier",
            "src": "340:15:1"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 54,
              "name": "Pausable",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 2716,
              "src": "357:8:1",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Pausable_$2716",
                "typeString": "contract Pausable"
              }
            },
            "id": 55,
            "nodeType": "InheritanceSpecifier",
            "src": "357:8:1"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 56,
              "name": "Ownable",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 3017,
              "src": "367:7:1",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Ownable_$3017",
                "typeString": "contract Ownable"
              }
            },
            "id": 57,
            "nodeType": "InheritanceSpecifier",
            "src": "367:7:1"
          }
        ],
        "contractDependencies": [
          1928,
          2440,
          2628,
          2716,
          3017,
          3581
        ],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 421,
        "linearizedBaseContracts": [
          421,
          3017,
          2716,
          2628,
          2440,
          3581,
          1928
        ],
        "name": "Invoker",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "id": 60,
            "libraryName": {
              "contractScope": null,
              "id": 58,
              "name": "SafeMath",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 2903,
              "src": "387:8:1",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_SafeMath_$2903",
                "typeString": "library SafeMath"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "381:27:1",
            "typeName": {
              "id": 59,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "400:7:1",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            }
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 70,
            "name": "Invocation",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 69,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 62,
                  "indexed": false,
                  "name": "invokeAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 70,
                  "src": "431:21:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 61,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "431:7:1",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 64,
                  "indexed": false,
                  "name": "invokeDataHash",
                  "nodeType": "VariableDeclaration",
                  "scope": 70,
                  "src": "454:22:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 63,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "454:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 66,
                  "indexed": false,
                  "name": "kTokenAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 70,
                  "src": "478:21:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 65,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "478:7:1",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 68,
                  "indexed": false,
                  "name": "tokenAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 70,
                  "src": "501:19:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 67,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "501:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "430:91:1"
            },
            "src": "414:108:1"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 78,
            "name": "Reward",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 77,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 72,
                  "indexed": false,
                  "name": "poolReward",
                  "nodeType": "VariableDeclaration",
                  "scope": 78,
                  "src": "540:18:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 71,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "540:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 74,
                  "indexed": false,
                  "name": "platformReward",
                  "nodeType": "VariableDeclaration",
                  "scope": 78,
                  "src": "560:22:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 73,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "560:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 76,
                  "indexed": false,
                  "name": "tokenAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 78,
                  "src": "584:20:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 75,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "584:7:1",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "539:66:1"
            },
            "src": "527:79:1"
          },
          {
            "constant": false,
            "id": 82,
            "name": "_kTokenToToken",
            "nodeType": "VariableDeclaration",
            "scope": 421,
            "src": "641:51:1",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
              "typeString": "mapping(address => address)"
            },
            "typeName": {
              "id": 81,
              "keyType": {
                "id": 79,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "649:7:1",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "641:27:1",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                "typeString": "mapping(address => address)"
              },
              "valueType": {
                "id": 80,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "660:7:1",
                "stateMutability": "nonpayable",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 84,
            "name": "_poolRewardBips",
            "nodeType": "VariableDeclaration",
            "scope": 421,
            "src": "762:32:1",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 83,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "762:7:1",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 86,
            "name": "_platformRewardBips",
            "nodeType": "VariableDeclaration",
            "scope": 421,
            "src": "868:36:1",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 85,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "868:7:1",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 88,
            "name": "_platformVaultAddress",
            "nodeType": "VariableDeclaration",
            "scope": 421,
            "src": "977:38:1",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 87,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "977:7:1",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 90,
            "name": "_currentTokenAmount",
            "nodeType": "VariableDeclaration",
            "scope": 421,
            "src": "1081:36:1",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 89,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1081:7:1",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 92,
            "name": "_currentExpectedBalance",
            "nodeType": "VariableDeclaration",
            "scope": 421,
            "src": "1202:40:1",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 91,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1202:7:1",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 94,
            "name": "_currentKTokenAddress",
            "nodeType": "VariableDeclaration",
            "scope": 421,
            "src": "1325:38:1",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 93,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "1325:7:1",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 97,
              "nodeType": "Block",
              "src": "1392:3:1",
              "statements": []
            },
            "documentation": null,
            "id": 98,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 95,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1382:2:1"
            },
            "returnParameters": {
              "id": 96,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1392:0:1"
            },
            "scope": 421,
            "src": "1370:25:1",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 257,
              "nodeType": "Block",
              "src": "1575:1835:1",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 118,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 114,
                          "name": "invokeAddress",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 100,
                          "src": "1593:13:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 116,
                              "name": "this",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3638,
                              "src": "1618:4:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_Invoker_$421",
                                "typeString": "contract Invoker"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_Invoker_$421",
                                "typeString": "contract Invoker"
                              }
                            ],
                            "id": 115,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "1610:7:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 117,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1610:13:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "1593:30:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "496e766f6b65723a2063616e6e6f7420696e766f6b65207468697320636f6e7472616374",
                        "id": 119,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1625:38:1",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_240b70231dc1ab85d5e65461741072f1747b65c237266f84676ff40a283df5c9",
                          "typeString": "literal_string \"Invoker: cannot invoke this contract\""
                        },
                        "value": "Invoker: cannot invoke this contract"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_240b70231dc1ab85d5e65461741072f1747b65c237266f84676ff40a283df5c9",
                          "typeString": "literal_string \"Invoker: cannot invoke this contract\""
                        }
                      ],
                      "id": 113,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        3599,
                        3600
                      ],
                      "referencedDeclaration": 3600,
                      "src": "1585:7:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 120,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1585:79:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 121,
                  "nodeType": "ExpressionStatement",
                  "src": "1585:79:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 129,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 123,
                            "name": "_kTokenToToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 82,
                            "src": "1682:14:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                              "typeString": "mapping(address => address)"
                            }
                          },
                          "id": 125,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 124,
                            "name": "invokeAddress",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 100,
                            "src": "1697:13:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "1682:29:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 127,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1723:1:1",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 126,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "1715:7:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 128,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1715:10:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "1682:43:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "496e766f6b65723a2063616e6e6f7420696e766f6b6520616e206b546f6b656e20636f6e7472616374",
                        "id": 130,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1727:43:1",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_b13969078ab24d8443f4a512de9521fa5ce6661952eb36795008ff70aefe47d1",
                          "typeString": "literal_string \"Invoker: cannot invoke an kToken contract\""
                        },
                        "value": "Invoker: cannot invoke an kToken contract"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_b13969078ab24d8443f4a512de9521fa5ce6661952eb36795008ff70aefe47d1",
                          "typeString": "literal_string \"Invoker: cannot invoke an kToken contract\""
                        }
                      ],
                      "id": 122,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        3599,
                        3600
                      ],
                      "referencedDeclaration": 3600,
                      "src": "1674:7:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 131,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1674:97:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 132,
                  "nodeType": "ExpressionStatement",
                  "src": "1674:97:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 140,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 134,
                            "name": "_kTokenToToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 82,
                            "src": "1789:14:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                              "typeString": "mapping(address => address)"
                            }
                          },
                          "id": 136,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 135,
                            "name": "kTokenAddress",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 104,
                            "src": "1804:13:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "1789:29:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 138,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1830:1:1",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 137,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "1822:7:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 139,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1822:10:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "1789:43:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "496e766f6b65723a206b546f6b656e206d757374206265656e2072656769737465726564",
                        "id": 141,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1834:38:1",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_6699063d475469831115f4fbca1e23bf07e1c1561145fd32a9e840dfe7bc0eee",
                          "typeString": "literal_string \"Invoker: kToken must been registered\""
                        },
                        "value": "Invoker: kToken must been registered"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_6699063d475469831115f4fbca1e23bf07e1c1561145fd32a9e840dfe7bc0eee",
                          "typeString": "literal_string \"Invoker: kToken must been registered\""
                        }
                      ],
                      "id": 133,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        3599,
                        3600
                      ],
                      "referencedDeclaration": 3600,
                      "src": "1781:7:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 142,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1781:92:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 143,
                  "nodeType": "ExpressionStatement",
                  "src": "1781:92:1"
                },
                {
                  "assignments": [
                    145
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 145,
                      "name": "kToken",
                      "nodeType": "VariableDeclaration",
                      "scope": 257,
                      "src": "1884:13:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_KToken_$1116",
                        "typeString": "contract KToken"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 144,
                        "name": "KToken",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 1116,
                        "src": "1884:6:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_KToken_$1116",
                          "typeString": "contract KToken"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 149,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 147,
                        "name": "kTokenAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 104,
                        "src": "1907:13:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 146,
                      "name": "KToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1116,
                      "src": "1900:6:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_KToken_$1116_$",
                        "typeString": "type(contract KToken)"
                      }
                    },
                    "id": 148,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1900:21:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_KToken_$1116",
                      "typeString": "contract KToken"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1884:37:1"
                },
                {
                  "assignments": [
                    151
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 151,
                      "name": "startingBalance",
                      "nodeType": "VariableDeclaration",
                      "scope": 257,
                      "src": "1990:23:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 150,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "1990:7:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 155,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 152,
                        "name": "kToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 145,
                        "src": "2016:6:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_KToken_$1116",
                          "typeString": "contract KToken"
                        }
                      },
                      "id": 153,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "totalReserve",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1030,
                      "src": "2016:19:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$",
                        "typeString": "function () view external returns (uint256)"
                      }
                    },
                    "id": 154,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2016:21:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1990:47:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 161,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 156,
                      "name": "_currentExpectedBalance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 92,
                      "src": "2047:23:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 158,
                          "name": "startingBalance",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 151,
                          "src": "2098:15:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 159,
                          "name": "tokenAmount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 106,
                          "src": "2115:11:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 157,
                        "name": "calculateExpectedBalance",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [
                          312
                        ],
                        "referencedDeclaration": 312,
                        "src": "2073:24:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                          "typeString": "function (uint256,uint256) view returns (uint256)"
                        }
                      },
                      "id": 160,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2073:54:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2047:80:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 162,
                  "nodeType": "ExpressionStatement",
                  "src": "2047:80:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 165,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 163,
                      "name": "_currentKTokenAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 94,
                      "src": "2137:21:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 164,
                      "name": "kTokenAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 104,
                      "src": "2161:13:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "2137:37:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 166,
                  "nodeType": "ExpressionStatement",
                  "src": "2137:37:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 169,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 167,
                      "name": "_currentTokenAmount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 90,
                      "src": "2184:19:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 168,
                      "name": "tokenAmount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 106,
                      "src": "2206:11:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2184:33:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 170,
                  "nodeType": "ExpressionStatement",
                  "src": "2184:33:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 174,
                            "name": "invokeAddress",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 100,
                            "src": "2354:13:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 175,
                            "name": "tokenAmount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 106,
                            "src": "2369:11:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 172,
                            "name": "kToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 145,
                            "src": "2328:6:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_KToken_$1116",
                              "typeString": "contract KToken"
                            }
                          },
                          "id": 173,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "transferUnderlying",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 856,
                          "src": "2328:25:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                            "typeString": "function (address,uint256) external returns (bool)"
                          }
                        },
                        "id": 176,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2328:53:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "496e766f6b65723a20756e61626c6520746f207472616e7366657220696e766f636174696f6e20616d6f756e74",
                        "id": 177,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2383:47:1",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_39fd4e2ae88d3756b5adfc01c64949a18109e45c4562f83246f29bf8e5a6a6e7",
                          "typeString": "literal_string \"Invoker: unable to transfer invocation amount\""
                        },
                        "value": "Invoker: unable to transfer invocation amount"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_39fd4e2ae88d3756b5adfc01c64949a18109e45c4562f83246f29bf8e5a6a6e7",
                          "typeString": "literal_string \"Invoker: unable to transfer invocation amount\""
                        }
                      ],
                      "id": 171,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        3599,
                        3600
                      ],
                      "referencedDeclaration": 3600,
                      "src": "2320:7:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 178,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2320:111:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 179,
                  "nodeType": "ExpressionStatement",
                  "src": "2320:111:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 180,
                        "name": "kToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 145,
                        "src": "2492:6:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_KToken_$1116",
                          "typeString": "contract KToken"
                        }
                      },
                      "id": 182,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "lock",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 878,
                      "src": "2492:11:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$__$returns$__$",
                        "typeString": "function () external"
                      }
                    },
                    "id": 183,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2492:13:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 184,
                  "nodeType": "ExpressionStatement",
                  "src": "2492:13:1"
                },
                {
                  "assignments": [
                    186,
                    188
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 186,
                      "name": "success",
                      "nodeType": "VariableDeclaration",
                      "scope": 257,
                      "src": "2556:12:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 185,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "2556:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 188,
                      "name": "returndata",
                      "nodeType": "VariableDeclaration",
                      "scope": 257,
                      "src": "2570:23:1",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 187,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "2570:5:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 197,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 195,
                        "name": "invokeData",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 102,
                        "src": "2633:10:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      ],
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 192,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3596,
                            "src": "2622:3:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 193,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "value",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "2622:9:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 189,
                            "name": "invokeAddress",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 100,
                            "src": "2597:13:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "id": 190,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "call",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "2597:18:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                            "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                          }
                        },
                        "id": 191,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "value",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "2597:24:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_setvalue_pure$_t_uint256_$returns$_t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value_$",
                          "typeString": "function (uint256) pure returns (function (bytes memory) payable returns (bool,bytes memory))"
                        }
                      },
                      "id": 194,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2597:35:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value",
                        "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                      }
                    },
                    "id": 196,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2597:47:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                      "typeString": "tuple(bool,bytes memory)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2555:89:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 199,
                        "name": "success",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 186,
                        "src": "2662:7:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 201,
                            "name": "returndata",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 188,
                            "src": "2678:10:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          ],
                          "id": 200,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "2671:6:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_string_storage_ptr_$",
                            "typeString": "type(string storage pointer)"
                          },
                          "typeName": "string"
                        },
                        "id": 202,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2671:18:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 198,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        3599,
                        3600
                      ],
                      "referencedDeclaration": 3600,
                      "src": "2654:7:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 203,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2654:36:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 204,
                  "nodeType": "ExpressionStatement",
                  "src": "2654:36:1"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 206,
                        "name": "invokeAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 100,
                        "src": "2716:13:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 208,
                            "name": "invokeData",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 102,
                            "src": "2741:10:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_calldata_ptr",
                              "typeString": "bytes calldata"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes_calldata_ptr",
                              "typeString": "bytes calldata"
                            }
                          ],
                          "id": 207,
                          "name": "keccak256",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3590,
                          "src": "2731:9:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                            "typeString": "function (bytes memory) pure returns (bytes32)"
                          }
                        },
                        "id": 209,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2731:21:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 210,
                        "name": "kTokenAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 104,
                        "src": "2754:13:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 211,
                        "name": "tokenAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 106,
                        "src": "2769:11:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 205,
                      "name": "Invocation",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        70
                      ],
                      "referencedDeclaration": 70,
                      "src": "2705:10:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_bytes32_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,bytes32,address,uint256)"
                      }
                    },
                    "id": 212,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2705:76:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 213,
                  "nodeType": "EmitStatement",
                  "src": "2700:81:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 214,
                        "name": "kToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 145,
                        "src": "2831:6:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_KToken_$1116",
                          "typeString": "contract KToken"
                        }
                      },
                      "id": 216,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "unlock",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 890,
                      "src": "2831:13:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$__$returns$__$",
                        "typeString": "function () external"
                      }
                    },
                    "id": 217,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2831:15:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 218,
                  "nodeType": "ExpressionStatement",
                  "src": "2831:15:1"
                },
                {
                  "assignments": [
                    220
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 220,
                      "name": "endingBalance",
                      "nodeType": "VariableDeclaration",
                      "scope": 257,
                      "src": "2919:21:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 219,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "2919:7:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 224,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 221,
                        "name": "kToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 145,
                        "src": "2943:6:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_KToken_$1116",
                          "typeString": "contract KToken"
                        }
                      },
                      "id": 222,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "totalReserve",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1030,
                      "src": "2943:19:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$",
                        "typeString": "function () view external returns (uint256)"
                      }
                    },
                    "id": 223,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2943:21:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2919:45:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 228,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 226,
                          "name": "_currentExpectedBalance",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 92,
                          "src": "2982:23:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 227,
                          "name": "endingBalance",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 220,
                          "src": "3009:13:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "2982:40:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "496e766f6b65723a20696e636f727265637420656e64696e672062616c616e6365",
                        "id": 229,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3024:35:1",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_1cc48fc5eb561004b5a19a8c591fea531a9cc322a4044b2b26e37c74b4b6d3a6",
                          "typeString": "literal_string \"Invoker: incorrect ending balance\""
                        },
                        "value": "Invoker: incorrect ending balance"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_1cc48fc5eb561004b5a19a8c591fea531a9cc322a4044b2b26e37c74b4b6d3a6",
                          "typeString": "literal_string \"Invoker: incorrect ending balance\""
                        }
                      ],
                      "id": 225,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        3599,
                        3600
                      ],
                      "referencedDeclaration": 3600,
                      "src": "2974:7:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 230,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2974:86:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 231,
                  "nodeType": "ExpressionStatement",
                  "src": "2974:86:1"
                },
                {
                  "assignments": [
                    233
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 233,
                      "name": "platformReward",
                      "nodeType": "VariableDeclaration",
                      "scope": 257,
                      "src": "3109:22:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 232,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "3109:7:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 237,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 235,
                        "name": "tokenAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 106,
                        "src": "3158:11:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 234,
                      "name": "calculatePlatformReward",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        290
                      ],
                      "referencedDeclaration": 290,
                      "src": "3134:23:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256) view returns (uint256)"
                      }
                    },
                    "id": 236,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3134:36:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3109:61:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 241,
                            "name": "_platformVaultAddress",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 88,
                            "src": "3215:21:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 242,
                            "name": "platformReward",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 233,
                            "src": "3238:14:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 239,
                            "name": "kToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 145,
                            "src": "3189:6:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_KToken_$1116",
                              "typeString": "contract KToken"
                            }
                          },
                          "id": 240,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "transferUnderlying",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 856,
                          "src": "3189:25:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                            "typeString": "function (address,uint256) external returns (bool)"
                          }
                        },
                        "id": 243,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3189:64:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "496e766f6b65723a20756e61626c6520746f207472616e7366657220706c6174666f726d20726577617264",
                        "id": 244,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3255:45:1",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_f1e161cfe2a7d021a3688a1f8a2216e41e5818d1d6c88006763153f8b3a04ab7",
                          "typeString": "literal_string \"Invoker: unable to transfer platform reward\""
                        },
                        "value": "Invoker: unable to transfer platform reward"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_f1e161cfe2a7d021a3688a1f8a2216e41e5818d1d6c88006763153f8b3a04ab7",
                          "typeString": "literal_string \"Invoker: unable to transfer platform reward\""
                        }
                      ],
                      "id": 238,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        3599,
                        3600
                      ],
                      "referencedDeclaration": 3600,
                      "src": "3181:7:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 245,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3181:120:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 246,
                  "nodeType": "ExpressionStatement",
                  "src": "3181:120:1"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 249,
                            "name": "tokenAmount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 106,
                            "src": "3343:11:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 248,
                          "name": "calculatePoolReward",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [
                            274
                          ],
                          "referencedDeclaration": 274,
                          "src": "3323:19:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$",
                            "typeString": "function (uint256) view returns (uint256)"
                          }
                        },
                        "id": 250,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3323:32:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 251,
                        "name": "platformReward",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 233,
                        "src": "3357:14:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 252,
                          "name": "_kTokenToToken",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 82,
                          "src": "3373:14:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                            "typeString": "mapping(address => address)"
                          }
                        },
                        "id": 254,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 253,
                          "name": "kTokenAddress",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 104,
                          "src": "3388:13:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "3373:29:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 247,
                      "name": "Reward",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        78
                      ],
                      "referencedDeclaration": 78,
                      "src": "3316:6:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_uint256_$_t_address_$returns$__$",
                        "typeString": "function (uint256,uint256,address)"
                      }
                    },
                    "id": 255,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3316:87:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 256,
                  "nodeType": "EmitStatement",
                  "src": "3311:92:1"
                }
              ]
            },
            "documentation": null,
            "id": 258,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 109,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 108,
                  "name": "nonReentrant",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 3580,
                  "src": "1540:12:1",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1540:12:1"
              },
              {
                "arguments": null,
                "id": 111,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 110,
                  "name": "whenNotPaused",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 2672,
                  "src": "1557:13:1",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1557:13:1"
              }
            ],
            "name": "invoke",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 107,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 100,
                  "name": "invokeAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 258,
                  "src": "1417:21:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 99,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1417:7:1",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 102,
                  "name": "invokeData",
                  "nodeType": "VariableDeclaration",
                  "scope": 258,
                  "src": "1440:25:1",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 101,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "1440:5:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 104,
                  "name": "kTokenAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 258,
                  "src": "1467:21:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 103,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1467:7:1",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 106,
                  "name": "tokenAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 258,
                  "src": "1490:19:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 105,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1490:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1416:94:1"
            },
            "returnParameters": {
              "id": 112,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1575:0:1"
            },
            "scope": 421,
            "src": "1401:2009:1",
            "stateMutability": "payable",
            "superFunction": 1854,
            "visibility": "external"
          },
          {
            "body": {
              "id": 273,
              "nodeType": "Block",
              "src": "3498:67:1",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "3130303030",
                        "id": 270,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3552:5:1",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_10000_by_1",
                          "typeString": "int_const 10000"
                        },
                        "value": "10000"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_rational_10000_by_1",
                          "typeString": "int_const 10000"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 267,
                            "name": "_poolRewardBips",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 84,
                            "src": "3531:15:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 265,
                            "name": "tokenAmount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 260,
                            "src": "3515:11:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 266,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "mul",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 2820,
                          "src": "3515:15:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                            "typeString": "function (uint256,uint256) pure returns (uint256)"
                          }
                        },
                        "id": 268,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3515:32:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 269,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "div",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2836,
                      "src": "3515:36:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 271,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3515:43:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 264,
                  "id": 272,
                  "nodeType": "Return",
                  "src": "3508:50:1"
                }
              ]
            },
            "documentation": null,
            "id": 274,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "calculatePoolReward",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 261,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 260,
                  "name": "tokenAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 274,
                  "src": "3445:19:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 259,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3445:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3444:21:1"
            },
            "returnParameters": {
              "id": 264,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 263,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 274,
                  "src": "3489:7:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 262,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3489:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3488:9:1"
            },
            "scope": 421,
            "src": "3416:149:1",
            "stateMutability": "view",
            "superFunction": 1861,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 289,
              "nodeType": "Block",
              "src": "3657:71:1",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "3130303030",
                        "id": 286,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3715:5:1",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_10000_by_1",
                          "typeString": "int_const 10000"
                        },
                        "value": "10000"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_rational_10000_by_1",
                          "typeString": "int_const 10000"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 283,
                            "name": "_platformRewardBips",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 86,
                            "src": "3690:19:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 281,
                            "name": "tokenAmount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 276,
                            "src": "3674:11:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 282,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "mul",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 2820,
                          "src": "3674:15:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                            "typeString": "function (uint256,uint256) pure returns (uint256)"
                          }
                        },
                        "id": 284,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3674:36:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 285,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "div",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2836,
                      "src": "3674:40:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 287,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3674:47:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 280,
                  "id": 288,
                  "nodeType": "Return",
                  "src": "3667:54:1"
                }
              ]
            },
            "documentation": null,
            "id": 290,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "calculatePlatformReward",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 277,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 276,
                  "name": "tokenAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 290,
                  "src": "3604:19:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 275,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3604:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3603:21:1"
            },
            "returnParameters": {
              "id": 280,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 279,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 290,
                  "src": "3648:7:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 278,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3648:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3647:9:1"
            },
            "scope": 421,
            "src": "3571:157:1",
            "stateMutability": "view",
            "superFunction": 1868,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 311,
              "nodeType": "Block",
              "src": "3846:119:1",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 307,
                            "name": "tokenAmount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 294,
                            "src": "3945:11:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 306,
                          "name": "calculatePlatformReward",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [
                            290
                          ],
                          "referencedDeclaration": 290,
                          "src": "3921:23:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$",
                            "typeString": "function (uint256) view returns (uint256)"
                          }
                        },
                        "id": 308,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3921:36:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 302,
                                "name": "tokenAmount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 294,
                                "src": "3903:11:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 301,
                              "name": "calculatePoolReward",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [
                                274
                              ],
                              "referencedDeclaration": 274,
                              "src": "3883:19:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$",
                                "typeString": "function (uint256) view returns (uint256)"
                              }
                            },
                            "id": 303,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3883:32:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 299,
                            "name": "startingBalance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 292,
                            "src": "3863:15:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 300,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "add",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 2743,
                          "src": "3863:19:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                            "typeString": "function (uint256,uint256) pure returns (uint256)"
                          }
                        },
                        "id": 304,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3863:53:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 305,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "add",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2743,
                      "src": "3863:57:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 309,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3863:95:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 298,
                  "id": 310,
                  "nodeType": "Return",
                  "src": "3856:102:1"
                }
              ]
            },
            "documentation": null,
            "id": 312,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "calculateExpectedBalance",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 295,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 292,
                  "name": "startingBalance",
                  "nodeType": "VariableDeclaration",
                  "scope": 312,
                  "src": "3768:23:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 291,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3768:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 294,
                  "name": "tokenAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 312,
                  "src": "3793:19:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 293,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3793:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3767:46:1"
            },
            "returnParameters": {
              "id": 298,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 297,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 312,
                  "src": "3837:7:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 296,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3837:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3836:9:1"
            },
            "scope": 421,
            "src": "3734:231:1",
            "stateMutability": "view",
            "superFunction": 1877,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 319,
              "nodeType": "Block",
              "src": "4025:39:1",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 317,
                    "name": "_poolRewardBips",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 84,
                    "src": "4042:15:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 316,
                  "id": 318,
                  "nodeType": "Return",
                  "src": "4035:22:1"
                }
              ]
            },
            "documentation": null,
            "id": 320,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "poolReward",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 313,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3990:2:1"
            },
            "returnParameters": {
              "id": 316,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 315,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 320,
                  "src": "4016:7:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 314,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4016:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4015:9:1"
            },
            "scope": 421,
            "src": "3971:93:1",
            "stateMutability": "view",
            "superFunction": 1882,
            "visibility": "external"
          },
          {
            "body": {
              "id": 327,
              "nodeType": "Block",
              "src": "4128:43:1",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 325,
                    "name": "_platformRewardBips",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 86,
                    "src": "4145:19:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 324,
                  "id": 326,
                  "nodeType": "Return",
                  "src": "4138:26:1"
                }
              ]
            },
            "documentation": null,
            "id": 328,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "platformReward",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 321,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4093:2:1"
            },
            "returnParameters": {
              "id": 324,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 323,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 328,
                  "src": "4119:7:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 322,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4119:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4118:9:1"
            },
            "scope": 421,
            "src": "4070:101:1",
            "stateMutability": "view",
            "superFunction": 1887,
            "visibility": "external"
          },
          {
            "body": {
              "id": 335,
              "nodeType": "Block",
              "src": "4285:43:1",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 333,
                    "name": "_currentTokenAmount",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 90,
                    "src": "4302:19:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 332,
                  "id": 334,
                  "nodeType": "Return",
                  "src": "4295:26:1"
                }
              ]
            },
            "documentation": null,
            "id": 336,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "currentTokenAmount",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 329,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4250:2:1"
            },
            "returnParameters": {
              "id": 332,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 331,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 336,
                  "src": "4276:7:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 330,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4276:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4275:9:1"
            },
            "scope": 421,
            "src": "4223:105:1",
            "stateMutability": "view",
            "superFunction": 1892,
            "visibility": "external"
          },
          {
            "body": {
              "id": 343,
              "nodeType": "Block",
              "src": "4400:47:1",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 341,
                    "name": "_currentExpectedBalance",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 92,
                    "src": "4417:23:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 340,
                  "id": 342,
                  "nodeType": "Return",
                  "src": "4410:30:1"
                }
              ]
            },
            "documentation": null,
            "id": 344,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "currentExpectedBalance",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 337,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4365:2:1"
            },
            "returnParameters": {
              "id": 340,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 339,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 344,
                  "src": "4391:7:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 338,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4391:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4390:9:1"
            },
            "scope": 421,
            "src": "4334:113:1",
            "stateMutability": "view",
            "superFunction": 1897,
            "visibility": "external"
          },
          {
            "body": {
              "id": 351,
              "nodeType": "Block",
              "src": "4517:45:1",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 349,
                    "name": "_currentKTokenAddress",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 94,
                    "src": "4534:21:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 348,
                  "id": 350,
                  "nodeType": "Return",
                  "src": "4527:28:1"
                }
              ]
            },
            "documentation": null,
            "id": 352,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "currentKTokenAddress",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 345,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4482:2:1"
            },
            "returnParameters": {
              "id": 348,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 347,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 352,
                  "src": "4508:7:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 346,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4508:7:1",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4507:9:1"
            },
            "scope": 421,
            "src": "4453:109:1",
            "stateMutability": "view",
            "superFunction": 1902,
            "visibility": "external"
          },
          {
            "body": {
              "id": 361,
              "nodeType": "Block",
              "src": "4631:61:1",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 357,
                      "name": "_kTokenToToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 82,
                      "src": "4648:14:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                        "typeString": "mapping(address => address)"
                      }
                    },
                    "id": 359,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 358,
                      "name": "_currentKTokenAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 94,
                      "src": "4663:21:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "4648:37:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 356,
                  "id": 360,
                  "nodeType": "Return",
                  "src": "4641:44:1"
                }
              ]
            },
            "documentation": null,
            "id": 362,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "currentTokenAddress",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 353,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4596:2:1"
            },
            "returnParameters": {
              "id": 356,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 355,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 362,
                  "src": "4622:7:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 354,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4622:7:1",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4621:9:1"
            },
            "scope": 421,
            "src": "4568:124:1",
            "stateMutability": "view",
            "superFunction": 1907,
            "visibility": "external"
          },
          {
            "body": {
              "id": 383,
              "nodeType": "Block",
              "src": "4791:117:1",
              "statements": [
                {
                  "assignments": [
                    370
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 370,
                      "name": "kToken",
                      "nodeType": "VariableDeclaration",
                      "scope": 383,
                      "src": "4801:13:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_KToken_$1116",
                        "typeString": "contract KToken"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 369,
                        "name": "KToken",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 1116,
                        "src": "4801:6:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_KToken_$1116",
                          "typeString": "contract KToken"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 374,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 372,
                        "name": "kTokenAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 364,
                        "src": "4824:13:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 371,
                      "name": "KToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1116,
                      "src": "4817:6:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_KToken_$1116_$",
                        "typeString": "type(contract KToken)"
                      }
                    },
                    "id": 373,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4817:21:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_KToken_$1116",
                      "typeString": "contract KToken"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4801:37:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 381,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 375,
                        "name": "_kTokenToToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 82,
                        "src": "4848:14:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                          "typeString": "mapping(address => address)"
                        }
                      },
                      "id": 377,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 376,
                        "name": "kTokenAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 364,
                        "src": "4863:13:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "4848:29:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "expression": {
                          "argumentTypes": null,
                          "id": 378,
                          "name": "kToken",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 370,
                          "src": "4880:6:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_KToken_$1116",
                            "typeString": "contract KToken"
                          }
                        },
                        "id": 379,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "tokenAddress",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1052,
                        "src": "4880:19:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
                          "typeString": "function () view external returns (address)"
                        }
                      },
                      "id": 380,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "4880:21:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "4848:53:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 382,
                  "nodeType": "ExpressionStatement",
                  "src": "4848:53:1"
                }
              ]
            },
            "documentation": null,
            "id": 384,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 367,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 366,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 2950,
                  "src": "4781:9:1",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "4781:9:1"
              }
            ],
            "name": "registerKToken",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 365,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 364,
                  "name": "kTokenAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 384,
                  "src": "4749:21:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 363,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4749:7:1",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4748:23:1"
            },
            "returnParameters": {
              "id": 368,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4791:0:1"
            },
            "scope": 421,
            "src": "4725:183:1",
            "stateMutability": "nonpayable",
            "superFunction": 1912,
            "visibility": "external"
          },
          {
            "body": {
              "id": 395,
              "nodeType": "Block",
              "src": "4980:49:1",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 393,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 391,
                      "name": "_poolRewardBips",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 84,
                      "src": "4990:15:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 392,
                      "name": "poolRewardBips",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 386,
                      "src": "5008:14:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "4990:32:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 394,
                  "nodeType": "ExpressionStatement",
                  "src": "4990:32:1"
                }
              ]
            },
            "documentation": null,
            "id": 396,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 389,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 388,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 2950,
                  "src": "4970:9:1",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "4970:9:1"
              }
            ],
            "name": "setPoolReward",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 387,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 386,
                  "name": "poolRewardBips",
                  "nodeType": "VariableDeclaration",
                  "scope": 396,
                  "src": "4937:22:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 385,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4937:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4936:24:1"
            },
            "returnParameters": {
              "id": 390,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4980:0:1"
            },
            "scope": 421,
            "src": "4914:115:1",
            "stateMutability": "nonpayable",
            "superFunction": 1917,
            "visibility": "external"
          },
          {
            "body": {
              "id": 407,
              "nodeType": "Block",
              "src": "5109:57:1",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 405,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 403,
                      "name": "_platformRewardBips",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 86,
                      "src": "5119:19:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 404,
                      "name": "platformRewardBips",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 398,
                      "src": "5141:18:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "5119:40:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 406,
                  "nodeType": "ExpressionStatement",
                  "src": "5119:40:1"
                }
              ]
            },
            "documentation": null,
            "id": 408,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 401,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 400,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 2950,
                  "src": "5099:9:1",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "5099:9:1"
              }
            ],
            "name": "setPlatformReward",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 399,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 398,
                  "name": "platformRewardBips",
                  "nodeType": "VariableDeclaration",
                  "scope": 408,
                  "src": "5062:26:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 397,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5062:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5061:28:1"
            },
            "returnParameters": {
              "id": 402,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5109:0:1"
            },
            "scope": 421,
            "src": "5035:131:1",
            "stateMutability": "nonpayable",
            "superFunction": 1922,
            "visibility": "external"
          },
          {
            "body": {
              "id": 419,
              "nodeType": "Block",
              "src": "5254:61:1",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 417,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 415,
                      "name": "_platformVaultAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 88,
                      "src": "5264:21:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 416,
                      "name": "platformVaultAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 410,
                      "src": "5288:20:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "5264:44:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 418,
                  "nodeType": "ExpressionStatement",
                  "src": "5264:44:1"
                }
              ]
            },
            "documentation": null,
            "id": 420,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 413,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 412,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 2950,
                  "src": "5244:9:1",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "5244:9:1"
              }
            ],
            "name": "setPlatformVaultAddress",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 411,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 410,
                  "name": "platformVaultAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 420,
                  "src": "5205:28:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 409,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5205:7:1",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5204:30:1"
            },
            "returnParameters": {
              "id": 414,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5254:0:1"
            },
            "scope": 421,
            "src": "5172:143:1",
            "stateMutability": "nonpayable",
            "superFunction": 1927,
            "visibility": "external"
          }
        ],
        "scope": 422,
        "src": "310:5007:1"
      }
    ],
    "src": "0:5318:1"
  },
  "legacyAST": {
    "absolutePath": "/Users/kbrizzle/code/kollateral/protocol/contracts/Invoker.sol",
    "exportedSymbols": {
      "Invoker": [
        421
      ]
    },
    "id": 422,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 43,
        "literals": [
          "solidity",
          "^",
          "0.5",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:1"
      },
      {
        "absolutePath": "@openzeppelin/contracts/math/SafeMath.sol",
        "file": "@openzeppelin/contracts/math/SafeMath.sol",
        "id": 44,
        "nodeType": "ImportDirective",
        "scope": 422,
        "sourceUnit": 2904,
        "src": "25:51:1",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@openzeppelin/contracts/utils/ReentrancyGuard.sol",
        "file": "@openzeppelin/contracts/utils/ReentrancyGuard.sol",
        "id": 45,
        "nodeType": "ImportDirective",
        "scope": 422,
        "sourceUnit": 3582,
        "src": "77:59:1",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@openzeppelin/contracts/ownership/Ownable.sol",
        "file": "@openzeppelin/contracts/ownership/Ownable.sol",
        "id": 46,
        "nodeType": "ImportDirective",
        "scope": 422,
        "sourceUnit": 3018,
        "src": "137:55:1",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@openzeppelin/contracts/lifecycle/Pausable.sol",
        "file": "@openzeppelin/contracts/lifecycle/Pausable.sol",
        "id": 47,
        "nodeType": "ImportDirective",
        "scope": 422,
        "sourceUnit": 2717,
        "src": "193:56:1",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/kbrizzle/code/kollateral/protocol/contracts/KToken.sol",
        "file": "./KToken.sol",
        "id": 48,
        "nodeType": "ImportDirective",
        "scope": 422,
        "sourceUnit": 1117,
        "src": "250:22:1",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/kbrizzle/code/kollateral/protocol/contracts/interfaces/IInvoker.sol",
        "file": "./interfaces/IInvoker.sol",
        "id": 49,
        "nodeType": "ImportDirective",
        "scope": 422,
        "sourceUnit": 1929,
        "src": "273:35:1",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 50,
              "name": "IInvoker",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 1928,
              "src": "330:8:1",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IInvoker_$1928",
                "typeString": "contract IInvoker"
              }
            },
            "id": 51,
            "nodeType": "InheritanceSpecifier",
            "src": "330:8:1"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 52,
              "name": "ReentrancyGuard",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 3581,
              "src": "340:15:1",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ReentrancyGuard_$3581",
                "typeString": "contract ReentrancyGuard"
              }
            },
            "id": 53,
            "nodeType": "InheritanceSpecifier",
            "src": "340:15:1"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 54,
              "name": "Pausable",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 2716,
              "src": "357:8:1",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Pausable_$2716",
                "typeString": "contract Pausable"
              }
            },
            "id": 55,
            "nodeType": "InheritanceSpecifier",
            "src": "357:8:1"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 56,
              "name": "Ownable",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 3017,
              "src": "367:7:1",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Ownable_$3017",
                "typeString": "contract Ownable"
              }
            },
            "id": 57,
            "nodeType": "InheritanceSpecifier",
            "src": "367:7:1"
          }
        ],
        "contractDependencies": [
          1928,
          2440,
          2628,
          2716,
          3017,
          3581
        ],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 421,
        "linearizedBaseContracts": [
          421,
          3017,
          2716,
          2628,
          2440,
          3581,
          1928
        ],
        "name": "Invoker",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "id": 60,
            "libraryName": {
              "contractScope": null,
              "id": 58,
              "name": "SafeMath",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 2903,
              "src": "387:8:1",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_SafeMath_$2903",
                "typeString": "library SafeMath"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "381:27:1",
            "typeName": {
              "id": 59,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "400:7:1",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            }
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 70,
            "name": "Invocation",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 69,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 62,
                  "indexed": false,
                  "name": "invokeAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 70,
                  "src": "431:21:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 61,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "431:7:1",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 64,
                  "indexed": false,
                  "name": "invokeDataHash",
                  "nodeType": "VariableDeclaration",
                  "scope": 70,
                  "src": "454:22:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 63,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "454:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 66,
                  "indexed": false,
                  "name": "kTokenAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 70,
                  "src": "478:21:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 65,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "478:7:1",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 68,
                  "indexed": false,
                  "name": "tokenAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 70,
                  "src": "501:19:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 67,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "501:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "430:91:1"
            },
            "src": "414:108:1"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 78,
            "name": "Reward",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 77,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 72,
                  "indexed": false,
                  "name": "poolReward",
                  "nodeType": "VariableDeclaration",
                  "scope": 78,
                  "src": "540:18:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 71,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "540:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 74,
                  "indexed": false,
                  "name": "platformReward",
                  "nodeType": "VariableDeclaration",
                  "scope": 78,
                  "src": "560:22:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 73,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "560:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 76,
                  "indexed": false,
                  "name": "tokenAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 78,
                  "src": "584:20:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 75,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "584:7:1",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "539:66:1"
            },
            "src": "527:79:1"
          },
          {
            "constant": false,
            "id": 82,
            "name": "_kTokenToToken",
            "nodeType": "VariableDeclaration",
            "scope": 421,
            "src": "641:51:1",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
              "typeString": "mapping(address => address)"
            },
            "typeName": {
              "id": 81,
              "keyType": {
                "id": 79,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "649:7:1",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "641:27:1",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                "typeString": "mapping(address => address)"
              },
              "valueType": {
                "id": 80,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "660:7:1",
                "stateMutability": "nonpayable",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 84,
            "name": "_poolRewardBips",
            "nodeType": "VariableDeclaration",
            "scope": 421,
            "src": "762:32:1",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 83,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "762:7:1",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 86,
            "name": "_platformRewardBips",
            "nodeType": "VariableDeclaration",
            "scope": 421,
            "src": "868:36:1",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 85,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "868:7:1",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 88,
            "name": "_platformVaultAddress",
            "nodeType": "VariableDeclaration",
            "scope": 421,
            "src": "977:38:1",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 87,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "977:7:1",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 90,
            "name": "_currentTokenAmount",
            "nodeType": "VariableDeclaration",
            "scope": 421,
            "src": "1081:36:1",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 89,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1081:7:1",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 92,
            "name": "_currentExpectedBalance",
            "nodeType": "VariableDeclaration",
            "scope": 421,
            "src": "1202:40:1",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 91,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1202:7:1",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 94,
            "name": "_currentKTokenAddress",
            "nodeType": "VariableDeclaration",
            "scope": 421,
            "src": "1325:38:1",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 93,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "1325:7:1",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 97,
              "nodeType": "Block",
              "src": "1392:3:1",
              "statements": []
            },
            "documentation": null,
            "id": 98,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 95,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1382:2:1"
            },
            "returnParameters": {
              "id": 96,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1392:0:1"
            },
            "scope": 421,
            "src": "1370:25:1",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 257,
              "nodeType": "Block",
              "src": "1575:1835:1",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 118,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 114,
                          "name": "invokeAddress",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 100,
                          "src": "1593:13:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 116,
                              "name": "this",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3638,
                              "src": "1618:4:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_Invoker_$421",
                                "typeString": "contract Invoker"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_Invoker_$421",
                                "typeString": "contract Invoker"
                              }
                            ],
                            "id": 115,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "1610:7:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 117,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1610:13:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "1593:30:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "496e766f6b65723a2063616e6e6f7420696e766f6b65207468697320636f6e7472616374",
                        "id": 119,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1625:38:1",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_240b70231dc1ab85d5e65461741072f1747b65c237266f84676ff40a283df5c9",
                          "typeString": "literal_string \"Invoker: cannot invoke this contract\""
                        },
                        "value": "Invoker: cannot invoke this contract"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_240b70231dc1ab85d5e65461741072f1747b65c237266f84676ff40a283df5c9",
                          "typeString": "literal_string \"Invoker: cannot invoke this contract\""
                        }
                      ],
                      "id": 113,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        3599,
                        3600
                      ],
                      "referencedDeclaration": 3600,
                      "src": "1585:7:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 120,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1585:79:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 121,
                  "nodeType": "ExpressionStatement",
                  "src": "1585:79:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 129,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 123,
                            "name": "_kTokenToToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 82,
                            "src": "1682:14:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                              "typeString": "mapping(address => address)"
                            }
                          },
                          "id": 125,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 124,
                            "name": "invokeAddress",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 100,
                            "src": "1697:13:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "1682:29:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 127,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1723:1:1",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 126,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "1715:7:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 128,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1715:10:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "1682:43:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "496e766f6b65723a2063616e6e6f7420696e766f6b6520616e206b546f6b656e20636f6e7472616374",
                        "id": 130,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1727:43:1",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_b13969078ab24d8443f4a512de9521fa5ce6661952eb36795008ff70aefe47d1",
                          "typeString": "literal_string \"Invoker: cannot invoke an kToken contract\""
                        },
                        "value": "Invoker: cannot invoke an kToken contract"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_b13969078ab24d8443f4a512de9521fa5ce6661952eb36795008ff70aefe47d1",
                          "typeString": "literal_string \"Invoker: cannot invoke an kToken contract\""
                        }
                      ],
                      "id": 122,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        3599,
                        3600
                      ],
                      "referencedDeclaration": 3600,
                      "src": "1674:7:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 131,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1674:97:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 132,
                  "nodeType": "ExpressionStatement",
                  "src": "1674:97:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 140,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 134,
                            "name": "_kTokenToToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 82,
                            "src": "1789:14:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                              "typeString": "mapping(address => address)"
                            }
                          },
                          "id": 136,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 135,
                            "name": "kTokenAddress",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 104,
                            "src": "1804:13:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "1789:29:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 138,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1830:1:1",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 137,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "1822:7:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 139,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1822:10:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "1789:43:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "496e766f6b65723a206b546f6b656e206d757374206265656e2072656769737465726564",
                        "id": 141,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1834:38:1",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_6699063d475469831115f4fbca1e23bf07e1c1561145fd32a9e840dfe7bc0eee",
                          "typeString": "literal_string \"Invoker: kToken must been registered\""
                        },
                        "value": "Invoker: kToken must been registered"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_6699063d475469831115f4fbca1e23bf07e1c1561145fd32a9e840dfe7bc0eee",
                          "typeString": "literal_string \"Invoker: kToken must been registered\""
                        }
                      ],
                      "id": 133,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        3599,
                        3600
                      ],
                      "referencedDeclaration": 3600,
                      "src": "1781:7:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 142,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1781:92:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 143,
                  "nodeType": "ExpressionStatement",
                  "src": "1781:92:1"
                },
                {
                  "assignments": [
                    145
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 145,
                      "name": "kToken",
                      "nodeType": "VariableDeclaration",
                      "scope": 257,
                      "src": "1884:13:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_KToken_$1116",
                        "typeString": "contract KToken"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 144,
                        "name": "KToken",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 1116,
                        "src": "1884:6:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_KToken_$1116",
                          "typeString": "contract KToken"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 149,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 147,
                        "name": "kTokenAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 104,
                        "src": "1907:13:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 146,
                      "name": "KToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1116,
                      "src": "1900:6:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_KToken_$1116_$",
                        "typeString": "type(contract KToken)"
                      }
                    },
                    "id": 148,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1900:21:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_KToken_$1116",
                      "typeString": "contract KToken"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1884:37:1"
                },
                {
                  "assignments": [
                    151
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 151,
                      "name": "startingBalance",
                      "nodeType": "VariableDeclaration",
                      "scope": 257,
                      "src": "1990:23:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 150,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "1990:7:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 155,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 152,
                        "name": "kToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 145,
                        "src": "2016:6:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_KToken_$1116",
                          "typeString": "contract KToken"
                        }
                      },
                      "id": 153,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "totalReserve",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1030,
                      "src": "2016:19:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$",
                        "typeString": "function () view external returns (uint256)"
                      }
                    },
                    "id": 154,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2016:21:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1990:47:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 161,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 156,
                      "name": "_currentExpectedBalance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 92,
                      "src": "2047:23:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 158,
                          "name": "startingBalance",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 151,
                          "src": "2098:15:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 159,
                          "name": "tokenAmount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 106,
                          "src": "2115:11:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 157,
                        "name": "calculateExpectedBalance",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [
                          312
                        ],
                        "referencedDeclaration": 312,
                        "src": "2073:24:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                          "typeString": "function (uint256,uint256) view returns (uint256)"
                        }
                      },
                      "id": 160,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2073:54:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2047:80:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 162,
                  "nodeType": "ExpressionStatement",
                  "src": "2047:80:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 165,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 163,
                      "name": "_currentKTokenAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 94,
                      "src": "2137:21:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 164,
                      "name": "kTokenAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 104,
                      "src": "2161:13:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "2137:37:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 166,
                  "nodeType": "ExpressionStatement",
                  "src": "2137:37:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 169,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 167,
                      "name": "_currentTokenAmount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 90,
                      "src": "2184:19:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 168,
                      "name": "tokenAmount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 106,
                      "src": "2206:11:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2184:33:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 170,
                  "nodeType": "ExpressionStatement",
                  "src": "2184:33:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 174,
                            "name": "invokeAddress",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 100,
                            "src": "2354:13:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 175,
                            "name": "tokenAmount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 106,
                            "src": "2369:11:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 172,
                            "name": "kToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 145,
                            "src": "2328:6:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_KToken_$1116",
                              "typeString": "contract KToken"
                            }
                          },
                          "id": 173,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "transferUnderlying",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 856,
                          "src": "2328:25:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                            "typeString": "function (address,uint256) external returns (bool)"
                          }
                        },
                        "id": 176,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2328:53:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "496e766f6b65723a20756e61626c6520746f207472616e7366657220696e766f636174696f6e20616d6f756e74",
                        "id": 177,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2383:47:1",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_39fd4e2ae88d3756b5adfc01c64949a18109e45c4562f83246f29bf8e5a6a6e7",
                          "typeString": "literal_string \"Invoker: unable to transfer invocation amount\""
                        },
                        "value": "Invoker: unable to transfer invocation amount"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_39fd4e2ae88d3756b5adfc01c64949a18109e45c4562f83246f29bf8e5a6a6e7",
                          "typeString": "literal_string \"Invoker: unable to transfer invocation amount\""
                        }
                      ],
                      "id": 171,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        3599,
                        3600
                      ],
                      "referencedDeclaration": 3600,
                      "src": "2320:7:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 178,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2320:111:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 179,
                  "nodeType": "ExpressionStatement",
                  "src": "2320:111:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 180,
                        "name": "kToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 145,
                        "src": "2492:6:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_KToken_$1116",
                          "typeString": "contract KToken"
                        }
                      },
                      "id": 182,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "lock",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 878,
                      "src": "2492:11:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$__$returns$__$",
                        "typeString": "function () external"
                      }
                    },
                    "id": 183,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2492:13:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 184,
                  "nodeType": "ExpressionStatement",
                  "src": "2492:13:1"
                },
                {
                  "assignments": [
                    186,
                    188
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 186,
                      "name": "success",
                      "nodeType": "VariableDeclaration",
                      "scope": 257,
                      "src": "2556:12:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 185,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "2556:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 188,
                      "name": "returndata",
                      "nodeType": "VariableDeclaration",
                      "scope": 257,
                      "src": "2570:23:1",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 187,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "2570:5:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 197,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 195,
                        "name": "invokeData",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 102,
                        "src": "2633:10:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      ],
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 192,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3596,
                            "src": "2622:3:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 193,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "value",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "2622:9:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 189,
                            "name": "invokeAddress",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 100,
                            "src": "2597:13:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "id": 190,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "call",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "2597:18:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                            "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                          }
                        },
                        "id": 191,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "value",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "2597:24:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_setvalue_pure$_t_uint256_$returns$_t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value_$",
                          "typeString": "function (uint256) pure returns (function (bytes memory) payable returns (bool,bytes memory))"
                        }
                      },
                      "id": 194,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2597:35:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value",
                        "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                      }
                    },
                    "id": 196,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2597:47:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                      "typeString": "tuple(bool,bytes memory)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2555:89:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 199,
                        "name": "success",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 186,
                        "src": "2662:7:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 201,
                            "name": "returndata",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 188,
                            "src": "2678:10:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          ],
                          "id": 200,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "2671:6:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_string_storage_ptr_$",
                            "typeString": "type(string storage pointer)"
                          },
                          "typeName": "string"
                        },
                        "id": 202,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2671:18:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 198,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        3599,
                        3600
                      ],
                      "referencedDeclaration": 3600,
                      "src": "2654:7:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 203,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2654:36:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 204,
                  "nodeType": "ExpressionStatement",
                  "src": "2654:36:1"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 206,
                        "name": "invokeAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 100,
                        "src": "2716:13:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 208,
                            "name": "invokeData",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 102,
                            "src": "2741:10:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_calldata_ptr",
                              "typeString": "bytes calldata"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes_calldata_ptr",
                              "typeString": "bytes calldata"
                            }
                          ],
                          "id": 207,
                          "name": "keccak256",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3590,
                          "src": "2731:9:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                            "typeString": "function (bytes memory) pure returns (bytes32)"
                          }
                        },
                        "id": 209,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2731:21:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 210,
                        "name": "kTokenAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 104,
                        "src": "2754:13:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 211,
                        "name": "tokenAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 106,
                        "src": "2769:11:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 205,
                      "name": "Invocation",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        70
                      ],
                      "referencedDeclaration": 70,
                      "src": "2705:10:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_bytes32_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,bytes32,address,uint256)"
                      }
                    },
                    "id": 212,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2705:76:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 213,
                  "nodeType": "EmitStatement",
                  "src": "2700:81:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 214,
                        "name": "kToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 145,
                        "src": "2831:6:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_KToken_$1116",
                          "typeString": "contract KToken"
                        }
                      },
                      "id": 216,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "unlock",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 890,
                      "src": "2831:13:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$__$returns$__$",
                        "typeString": "function () external"
                      }
                    },
                    "id": 217,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2831:15:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 218,
                  "nodeType": "ExpressionStatement",
                  "src": "2831:15:1"
                },
                {
                  "assignments": [
                    220
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 220,
                      "name": "endingBalance",
                      "nodeType": "VariableDeclaration",
                      "scope": 257,
                      "src": "2919:21:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 219,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "2919:7:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 224,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 221,
                        "name": "kToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 145,
                        "src": "2943:6:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_KToken_$1116",
                          "typeString": "contract KToken"
                        }
                      },
                      "id": 222,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "totalReserve",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1030,
                      "src": "2943:19:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$",
                        "typeString": "function () view external returns (uint256)"
                      }
                    },
                    "id": 223,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2943:21:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2919:45:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 228,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 226,
                          "name": "_currentExpectedBalance",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 92,
                          "src": "2982:23:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 227,
                          "name": "endingBalance",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 220,
                          "src": "3009:13:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "2982:40:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "496e766f6b65723a20696e636f727265637420656e64696e672062616c616e6365",
                        "id": 229,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3024:35:1",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_1cc48fc5eb561004b5a19a8c591fea531a9cc322a4044b2b26e37c74b4b6d3a6",
                          "typeString": "literal_string \"Invoker: incorrect ending balance\""
                        },
                        "value": "Invoker: incorrect ending balance"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_1cc48fc5eb561004b5a19a8c591fea531a9cc322a4044b2b26e37c74b4b6d3a6",
                          "typeString": "literal_string \"Invoker: incorrect ending balance\""
                        }
                      ],
                      "id": 225,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        3599,
                        3600
                      ],
                      "referencedDeclaration": 3600,
                      "src": "2974:7:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 230,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2974:86:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 231,
                  "nodeType": "ExpressionStatement",
                  "src": "2974:86:1"
                },
                {
                  "assignments": [
                    233
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 233,
                      "name": "platformReward",
                      "nodeType": "VariableDeclaration",
                      "scope": 257,
                      "src": "3109:22:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 232,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "3109:7:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 237,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 235,
                        "name": "tokenAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 106,
                        "src": "3158:11:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 234,
                      "name": "calculatePlatformReward",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        290
                      ],
                      "referencedDeclaration": 290,
                      "src": "3134:23:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256) view returns (uint256)"
                      }
                    },
                    "id": 236,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3134:36:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3109:61:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 241,
                            "name": "_platformVaultAddress",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 88,
                            "src": "3215:21:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 242,
                            "name": "platformReward",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 233,
                            "src": "3238:14:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 239,
                            "name": "kToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 145,
                            "src": "3189:6:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_KToken_$1116",
                              "typeString": "contract KToken"
                            }
                          },
                          "id": 240,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "transferUnderlying",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 856,
                          "src": "3189:25:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                            "typeString": "function (address,uint256) external returns (bool)"
                          }
                        },
                        "id": 243,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3189:64:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "496e766f6b65723a20756e61626c6520746f207472616e7366657220706c6174666f726d20726577617264",
                        "id": 244,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3255:45:1",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_f1e161cfe2a7d021a3688a1f8a2216e41e5818d1d6c88006763153f8b3a04ab7",
                          "typeString": "literal_string \"Invoker: unable to transfer platform reward\""
                        },
                        "value": "Invoker: unable to transfer platform reward"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_f1e161cfe2a7d021a3688a1f8a2216e41e5818d1d6c88006763153f8b3a04ab7",
                          "typeString": "literal_string \"Invoker: unable to transfer platform reward\""
                        }
                      ],
                      "id": 238,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        3599,
                        3600
                      ],
                      "referencedDeclaration": 3600,
                      "src": "3181:7:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 245,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3181:120:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 246,
                  "nodeType": "ExpressionStatement",
                  "src": "3181:120:1"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 249,
                            "name": "tokenAmount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 106,
                            "src": "3343:11:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 248,
                          "name": "calculatePoolReward",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [
                            274
                          ],
                          "referencedDeclaration": 274,
                          "src": "3323:19:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$",
                            "typeString": "function (uint256) view returns (uint256)"
                          }
                        },
                        "id": 250,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3323:32:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 251,
                        "name": "platformReward",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 233,
                        "src": "3357:14:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 252,
                          "name": "_kTokenToToken",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 82,
                          "src": "3373:14:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                            "typeString": "mapping(address => address)"
                          }
                        },
                        "id": 254,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 253,
                          "name": "kTokenAddress",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 104,
                          "src": "3388:13:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "3373:29:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 247,
                      "name": "Reward",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        78
                      ],
                      "referencedDeclaration": 78,
                      "src": "3316:6:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_uint256_$_t_address_$returns$__$",
                        "typeString": "function (uint256,uint256,address)"
                      }
                    },
                    "id": 255,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3316:87:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 256,
                  "nodeType": "EmitStatement",
                  "src": "3311:92:1"
                }
              ]
            },
            "documentation": null,
            "id": 258,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 109,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 108,
                  "name": "nonReentrant",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 3580,
                  "src": "1540:12:1",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1540:12:1"
              },
              {
                "arguments": null,
                "id": 111,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 110,
                  "name": "whenNotPaused",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 2672,
                  "src": "1557:13:1",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1557:13:1"
              }
            ],
            "name": "invoke",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 107,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 100,
                  "name": "invokeAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 258,
                  "src": "1417:21:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 99,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1417:7:1",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 102,
                  "name": "invokeData",
                  "nodeType": "VariableDeclaration",
                  "scope": 258,
                  "src": "1440:25:1",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 101,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "1440:5:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 104,
                  "name": "kTokenAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 258,
                  "src": "1467:21:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 103,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1467:7:1",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 106,
                  "name": "tokenAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 258,
                  "src": "1490:19:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 105,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1490:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1416:94:1"
            },
            "returnParameters": {
              "id": 112,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1575:0:1"
            },
            "scope": 421,
            "src": "1401:2009:1",
            "stateMutability": "payable",
            "superFunction": 1854,
            "visibility": "external"
          },
          {
            "body": {
              "id": 273,
              "nodeType": "Block",
              "src": "3498:67:1",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "3130303030",
                        "id": 270,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3552:5:1",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_10000_by_1",
                          "typeString": "int_const 10000"
                        },
                        "value": "10000"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_rational_10000_by_1",
                          "typeString": "int_const 10000"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 267,
                            "name": "_poolRewardBips",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 84,
                            "src": "3531:15:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 265,
                            "name": "tokenAmount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 260,
                            "src": "3515:11:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 266,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "mul",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 2820,
                          "src": "3515:15:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                            "typeString": "function (uint256,uint256) pure returns (uint256)"
                          }
                        },
                        "id": 268,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3515:32:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 269,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "div",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2836,
                      "src": "3515:36:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 271,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3515:43:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 264,
                  "id": 272,
                  "nodeType": "Return",
                  "src": "3508:50:1"
                }
              ]
            },
            "documentation": null,
            "id": 274,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "calculatePoolReward",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 261,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 260,
                  "name": "tokenAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 274,
                  "src": "3445:19:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 259,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3445:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3444:21:1"
            },
            "returnParameters": {
              "id": 264,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 263,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 274,
                  "src": "3489:7:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 262,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3489:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3488:9:1"
            },
            "scope": 421,
            "src": "3416:149:1",
            "stateMutability": "view",
            "superFunction": 1861,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 289,
              "nodeType": "Block",
              "src": "3657:71:1",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "3130303030",
                        "id": 286,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3715:5:1",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_10000_by_1",
                          "typeString": "int_const 10000"
                        },
                        "value": "10000"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_rational_10000_by_1",
                          "typeString": "int_const 10000"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 283,
                            "name": "_platformRewardBips",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 86,
                            "src": "3690:19:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 281,
                            "name": "tokenAmount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 276,
                            "src": "3674:11:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 282,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "mul",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 2820,
                          "src": "3674:15:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                            "typeString": "function (uint256,uint256) pure returns (uint256)"
                          }
                        },
                        "id": 284,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3674:36:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 285,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "div",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2836,
                      "src": "3674:40:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 287,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3674:47:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 280,
                  "id": 288,
                  "nodeType": "Return",
                  "src": "3667:54:1"
                }
              ]
            },
            "documentation": null,
            "id": 290,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "calculatePlatformReward",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 277,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 276,
                  "name": "tokenAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 290,
                  "src": "3604:19:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 275,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3604:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3603:21:1"
            },
            "returnParameters": {
              "id": 280,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 279,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 290,
                  "src": "3648:7:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 278,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3648:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3647:9:1"
            },
            "scope": 421,
            "src": "3571:157:1",
            "stateMutability": "view",
            "superFunction": 1868,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 311,
              "nodeType": "Block",
              "src": "3846:119:1",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 307,
                            "name": "tokenAmount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 294,
                            "src": "3945:11:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 306,
                          "name": "calculatePlatformReward",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [
                            290
                          ],
                          "referencedDeclaration": 290,
                          "src": "3921:23:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$",
                            "typeString": "function (uint256) view returns (uint256)"
                          }
                        },
                        "id": 308,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3921:36:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 302,
                                "name": "tokenAmount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 294,
                                "src": "3903:11:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 301,
                              "name": "calculatePoolReward",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [
                                274
                              ],
                              "referencedDeclaration": 274,
                              "src": "3883:19:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$",
                                "typeString": "function (uint256) view returns (uint256)"
                              }
                            },
                            "id": 303,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3883:32:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 299,
                            "name": "startingBalance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 292,
                            "src": "3863:15:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 300,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "add",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 2743,
                          "src": "3863:19:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                            "typeString": "function (uint256,uint256) pure returns (uint256)"
                          }
                        },
                        "id": 304,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3863:53:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 305,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "add",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2743,
                      "src": "3863:57:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 309,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3863:95:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 298,
                  "id": 310,
                  "nodeType": "Return",
                  "src": "3856:102:1"
                }
              ]
            },
            "documentation": null,
            "id": 312,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "calculateExpectedBalance",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 295,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 292,
                  "name": "startingBalance",
                  "nodeType": "VariableDeclaration",
                  "scope": 312,
                  "src": "3768:23:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 291,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3768:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 294,
                  "name": "tokenAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 312,
                  "src": "3793:19:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 293,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3793:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3767:46:1"
            },
            "returnParameters": {
              "id": 298,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 297,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 312,
                  "src": "3837:7:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 296,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3837:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3836:9:1"
            },
            "scope": 421,
            "src": "3734:231:1",
            "stateMutability": "view",
            "superFunction": 1877,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 319,
              "nodeType": "Block",
              "src": "4025:39:1",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 317,
                    "name": "_poolRewardBips",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 84,
                    "src": "4042:15:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 316,
                  "id": 318,
                  "nodeType": "Return",
                  "src": "4035:22:1"
                }
              ]
            },
            "documentation": null,
            "id": 320,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "poolReward",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 313,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3990:2:1"
            },
            "returnParameters": {
              "id": 316,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 315,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 320,
                  "src": "4016:7:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 314,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4016:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4015:9:1"
            },
            "scope": 421,
            "src": "3971:93:1",
            "stateMutability": "view",
            "superFunction": 1882,
            "visibility": "external"
          },
          {
            "body": {
              "id": 327,
              "nodeType": "Block",
              "src": "4128:43:1",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 325,
                    "name": "_platformRewardBips",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 86,
                    "src": "4145:19:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 324,
                  "id": 326,
                  "nodeType": "Return",
                  "src": "4138:26:1"
                }
              ]
            },
            "documentation": null,
            "id": 328,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "platformReward",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 321,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4093:2:1"
            },
            "returnParameters": {
              "id": 324,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 323,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 328,
                  "src": "4119:7:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 322,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4119:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4118:9:1"
            },
            "scope": 421,
            "src": "4070:101:1",
            "stateMutability": "view",
            "superFunction": 1887,
            "visibility": "external"
          },
          {
            "body": {
              "id": 335,
              "nodeType": "Block",
              "src": "4285:43:1",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 333,
                    "name": "_currentTokenAmount",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 90,
                    "src": "4302:19:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 332,
                  "id": 334,
                  "nodeType": "Return",
                  "src": "4295:26:1"
                }
              ]
            },
            "documentation": null,
            "id": 336,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "currentTokenAmount",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 329,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4250:2:1"
            },
            "returnParameters": {
              "id": 332,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 331,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 336,
                  "src": "4276:7:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 330,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4276:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4275:9:1"
            },
            "scope": 421,
            "src": "4223:105:1",
            "stateMutability": "view",
            "superFunction": 1892,
            "visibility": "external"
          },
          {
            "body": {
              "id": 343,
              "nodeType": "Block",
              "src": "4400:47:1",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 341,
                    "name": "_currentExpectedBalance",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 92,
                    "src": "4417:23:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 340,
                  "id": 342,
                  "nodeType": "Return",
                  "src": "4410:30:1"
                }
              ]
            },
            "documentation": null,
            "id": 344,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "currentExpectedBalance",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 337,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4365:2:1"
            },
            "returnParameters": {
              "id": 340,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 339,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 344,
                  "src": "4391:7:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 338,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4391:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4390:9:1"
            },
            "scope": 421,
            "src": "4334:113:1",
            "stateMutability": "view",
            "superFunction": 1897,
            "visibility": "external"
          },
          {
            "body": {
              "id": 351,
              "nodeType": "Block",
              "src": "4517:45:1",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 349,
                    "name": "_currentKTokenAddress",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 94,
                    "src": "4534:21:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 348,
                  "id": 350,
                  "nodeType": "Return",
                  "src": "4527:28:1"
                }
              ]
            },
            "documentation": null,
            "id": 352,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "currentKTokenAddress",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 345,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4482:2:1"
            },
            "returnParameters": {
              "id": 348,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 347,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 352,
                  "src": "4508:7:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 346,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4508:7:1",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4507:9:1"
            },
            "scope": 421,
            "src": "4453:109:1",
            "stateMutability": "view",
            "superFunction": 1902,
            "visibility": "external"
          },
          {
            "body": {
              "id": 361,
              "nodeType": "Block",
              "src": "4631:61:1",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 357,
                      "name": "_kTokenToToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 82,
                      "src": "4648:14:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                        "typeString": "mapping(address => address)"
                      }
                    },
                    "id": 359,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 358,
                      "name": "_currentKTokenAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 94,
                      "src": "4663:21:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "4648:37:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 356,
                  "id": 360,
                  "nodeType": "Return",
                  "src": "4641:44:1"
                }
              ]
            },
            "documentation": null,
            "id": 362,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "currentTokenAddress",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 353,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4596:2:1"
            },
            "returnParameters": {
              "id": 356,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 355,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 362,
                  "src": "4622:7:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 354,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4622:7:1",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4621:9:1"
            },
            "scope": 421,
            "src": "4568:124:1",
            "stateMutability": "view",
            "superFunction": 1907,
            "visibility": "external"
          },
          {
            "body": {
              "id": 383,
              "nodeType": "Block",
              "src": "4791:117:1",
              "statements": [
                {
                  "assignments": [
                    370
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 370,
                      "name": "kToken",
                      "nodeType": "VariableDeclaration",
                      "scope": 383,
                      "src": "4801:13:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_KToken_$1116",
                        "typeString": "contract KToken"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 369,
                        "name": "KToken",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 1116,
                        "src": "4801:6:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_KToken_$1116",
                          "typeString": "contract KToken"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 374,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 372,
                        "name": "kTokenAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 364,
                        "src": "4824:13:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 371,
                      "name": "KToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1116,
                      "src": "4817:6:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_KToken_$1116_$",
                        "typeString": "type(contract KToken)"
                      }
                    },
                    "id": 373,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4817:21:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_KToken_$1116",
                      "typeString": "contract KToken"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4801:37:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 381,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 375,
                        "name": "_kTokenToToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 82,
                        "src": "4848:14:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                          "typeString": "mapping(address => address)"
                        }
                      },
                      "id": 377,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 376,
                        "name": "kTokenAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 364,
                        "src": "4863:13:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "4848:29:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "expression": {
                          "argumentTypes": null,
                          "id": 378,
                          "name": "kToken",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 370,
                          "src": "4880:6:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_KToken_$1116",
                            "typeString": "contract KToken"
                          }
                        },
                        "id": 379,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "tokenAddress",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1052,
                        "src": "4880:19:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
                          "typeString": "function () view external returns (address)"
                        }
                      },
                      "id": 380,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "4880:21:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "4848:53:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 382,
                  "nodeType": "ExpressionStatement",
                  "src": "4848:53:1"
                }
              ]
            },
            "documentation": null,
            "id": 384,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 367,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 366,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 2950,
                  "src": "4781:9:1",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "4781:9:1"
              }
            ],
            "name": "registerKToken",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 365,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 364,
                  "name": "kTokenAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 384,
                  "src": "4749:21:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 363,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4749:7:1",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4748:23:1"
            },
            "returnParameters": {
              "id": 368,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4791:0:1"
            },
            "scope": 421,
            "src": "4725:183:1",
            "stateMutability": "nonpayable",
            "superFunction": 1912,
            "visibility": "external"
          },
          {
            "body": {
              "id": 395,
              "nodeType": "Block",
              "src": "4980:49:1",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 393,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 391,
                      "name": "_poolRewardBips",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 84,
                      "src": "4990:15:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 392,
                      "name": "poolRewardBips",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 386,
                      "src": "5008:14:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "4990:32:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 394,
                  "nodeType": "ExpressionStatement",
                  "src": "4990:32:1"
                }
              ]
            },
            "documentation": null,
            "id": 396,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 389,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 388,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 2950,
                  "src": "4970:9:1",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "4970:9:1"
              }
            ],
            "name": "setPoolReward",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 387,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 386,
                  "name": "poolRewardBips",
                  "nodeType": "VariableDeclaration",
                  "scope": 396,
                  "src": "4937:22:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 385,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4937:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4936:24:1"
            },
            "returnParameters": {
              "id": 390,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4980:0:1"
            },
            "scope": 421,
            "src": "4914:115:1",
            "stateMutability": "nonpayable",
            "superFunction": 1917,
            "visibility": "external"
          },
          {
            "body": {
              "id": 407,
              "nodeType": "Block",
              "src": "5109:57:1",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 405,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 403,
                      "name": "_platformRewardBips",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 86,
                      "src": "5119:19:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 404,
                      "name": "platformRewardBips",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 398,
                      "src": "5141:18:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "5119:40:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 406,
                  "nodeType": "ExpressionStatement",
                  "src": "5119:40:1"
                }
              ]
            },
            "documentation": null,
            "id": 408,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 401,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 400,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 2950,
                  "src": "5099:9:1",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "5099:9:1"
              }
            ],
            "name": "setPlatformReward",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 399,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 398,
                  "name": "platformRewardBips",
                  "nodeType": "VariableDeclaration",
                  "scope": 408,
                  "src": "5062:26:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 397,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5062:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5061:28:1"
            },
            "returnParameters": {
              "id": 402,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5109:0:1"
            },
            "scope": 421,
            "src": "5035:131:1",
            "stateMutability": "nonpayable",
            "superFunction": 1922,
            "visibility": "external"
          },
          {
            "body": {
              "id": 419,
              "nodeType": "Block",
              "src": "5254:61:1",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 417,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 415,
                      "name": "_platformVaultAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 88,
                      "src": "5264:21:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 416,
                      "name": "platformVaultAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 410,
                      "src": "5288:20:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "5264:44:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 418,
                  "nodeType": "ExpressionStatement",
                  "src": "5264:44:1"
                }
              ]
            },
            "documentation": null,
            "id": 420,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 413,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 412,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 2950,
                  "src": "5244:9:1",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "5244:9:1"
              }
            ],
            "name": "setPlatformVaultAddress",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 411,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 410,
                  "name": "platformVaultAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 420,
                  "src": "5205:28:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 409,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5205:7:1",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5204:30:1"
            },
            "returnParameters": {
              "id": 414,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5254:0:1"
            },
            "scope": 421,
            "src": "5172:143:1",
            "stateMutability": "nonpayable",
            "superFunction": 1927,
            "visibility": "external"
          }
        ],
        "scope": 422,
        "src": "310:5007:1"
      }
    ],
    "src": "0:5318:1"
  },
  "compiler": {
    "name": "solc",
    "version": "0.5.16+commit.9c3226ce.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.0.20",
  "updatedAt": "2020-02-01T23:51:00.329Z",
  "devdoc": {
    "methods": {
      "isOwner()": {
        "details": "Returns true if the caller is the current owner."
      },
      "owner()": {
        "details": "Returns the address of the current owner."
      },
      "pause()": {
        "details": "Called by a pauser to pause, triggers stopped state."
      },
      "paused()": {
        "details": "Returns true if the contract is paused, and false otherwise."
      },
      "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."
      },
      "unpause()": {
        "details": "Called by a pauser to unpause, returns to normal state."
      }
    }
  },
  "userdoc": {
    "methods": {}
  }
}