{
  "contractName": "ContributionCalc",
  "abi": [
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "contract GoodMarketMaker",
          "name": "_marketMaker",
          "type": "address"
        },
        {
          "internalType": "contract GoodReserveCDai",
          "name": "_reserve",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_contributer",
          "type": "address"
        },
        {
          "internalType": "contract ERC20",
          "name": "_token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_gdAmount",
          "type": "uint256"
        }
      ],
      "name": "calculateContribution",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.5.16+commit.9c3226ce\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"constant\":true,\"inputs\":[{\"internalType\":\"contract GoodMarketMaker\",\"name\":\"_marketMaker\",\"type\":\"address\"},{\"internalType\":\"contract GoodReserveCDai\",\"name\":\"_reserve\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_contributer\",\"type\":\"address\"},{\"internalType\":\"contract ERC20\",\"name\":\"_token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_gdAmount\",\"type\":\"uint256\"}],\"name\":\"calculateContribution\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"methods\":{}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/stakingModel/contracts/GoodReserveCDai.sol\":\"ContributionCalc\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/DSMath.sol\":{\"keccak256\":\"0x59fb5b1c4c3f68c1694f6ff5698016ac8ee9401b61e87473113dc103b7a6b0ff\",\"urls\":[\"bzz-raw://7410f43989dea44e64bed870958ce9199606dd8a9783e79fe8deca7b544164af\",\"dweb:/ipfs/QmPrrdvp2ErwL6SJSveB3JANo7ivadSMnk9gpWZD8nR7hy\"]},\"/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/dao/schemes/ActivePeriod.sol\":{\"keccak256\":\"0xd6b17fe8c789a03e87c80046319caee9fc9c9b5ded9008b09a550027c205c5ab\",\"urls\":[\"bzz-raw://0f77e8dc5f6abeefc9a2e185c257516f7f0266ae2781dd67c18daf1aac667daf\",\"dweb:/ipfs/QmbeRqLP2MvTZifqPBSK3PUDh8TjC1RaTA8b1dRRAXahmJ\"]},\"/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/dao/schemes/FeeFormula.sol\":{\"keccak256\":\"0x2ac93f891a65aa60b93e2b27552850dfa459b88f5a19edc29bb5bab0cc4f3eaa\",\"urls\":[\"bzz-raw://bddb94bc0230d959d2362887a253a47b91f0de6804cba8e4569a7cac47c39b5a\",\"dweb:/ipfs/QmTdkPQHRdzxJ7D7pi9cowLgYY9wVja416dhBwCsdtPEv5\"]},\"/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/dao/schemes/FeelessScheme.sol\":{\"keccak256\":\"0x7c542d44cbd864ee0ddecbc5016d9d7eb9ce65ab463fdd9f21eb8ce3c6ffc8ea\",\"urls\":[\"bzz-raw://4753dd823c0b0cbe7d7d02e1df64ace07d7a163af3aaff12697aee70a1b45f2f\",\"dweb:/ipfs/QmPkKeH88M3f6UbHphayUbjEBNV4rmoogtDmVundzBKbFK\"]},\"/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/dao/schemes/FormulaHolder.sol\":{\"keccak256\":\"0xb3c0d3bc21e71497784e1be11698ff501ee11545c3106bec2cae2e8af1bacd9b\",\"urls\":[\"bzz-raw://783b4e28b67231de0fbbe48e58f43f69db3f98fd7f75668edce145a55a9b5b17\",\"dweb:/ipfs/QmdeyRfeix3PGfaXqtRQpH1sjmjFpdtuGaPwnvRn7nHAWd\"]},\"/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/dao/schemes/SchemeGuard.sol\":{\"keccak256\":\"0x32e1b2a172e2c22a6aa757bfcb0722cc67f64c5c2e48df3dec2737903516d565\",\"urls\":[\"bzz-raw://bee57a8eba08348e93a0c18f3ab534e67865c0fa27afe27f5cf234bd5f248915\",\"dweb:/ipfs/Qmd8aveHWcUkYWMyJrJRZPyVXj8MAMBfpBFo6g4Z2VJeo3\"]},\"/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/identity/Identity.sol\":{\"keccak256\":\"0x282184478f1d618d3523b28a84a7f7003dfdc99cad120e5e358d2cce1f5fb491\",\"urls\":[\"bzz-raw://67e17ecb57b24c4fb801abc2c52c3148af3b967e28da4fb7e074d18efb7a57c1\",\"dweb:/ipfs/QmfZ8jXhdTHtxr3gfByRj4HnXnGynX7SLZWWGR8k768aGB\"]},\"/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/identity/IdentityAdminRole.sol\":{\"keccak256\":\"0x8e82c45eefe0da77d017144dfad12602c68124297035937901cdd08ce48c57ff\",\"urls\":[\"bzz-raw://e20e606342b3b35f41a081294cf3f716fe7e27e81d3090daa37c5208f4ef4bc3\",\"dweb:/ipfs/QmVEhHpiwVsksnPyHkfNa5LpTBLxoP9kj5NRZUBv456ewK\"]},\"/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/identity/IdentityGuard.sol\":{\"keccak256\":\"0xcc395c0e8f812201b5ed1f45e7272120ee5ffe73bfe13e325dfd872aef235b22\",\"urls\":[\"bzz-raw://58f93e4b9f48ec31ac151208e4f9e6b356cc23dfc9585d846bc09bf35d6ff7be\",\"dweb:/ipfs/QmdxJHUCaFx8N66kkDhYdA4k6d2V91yBRG6sombuPxBq7X\"]},\"/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/token/ERC677/ERC677.sol\":{\"keccak256\":\"0x8360b9e356df8584d95990bb7e772342b30d9e22b160f7c875fbca5c0b87453c\",\"urls\":[\"bzz-raw://97cc6e5586cedcd49462cc465a2a8fc5063d7ec6cb9533f4e0099969a75bd4b2\",\"dweb:/ipfs/QmXw6y4iXfqyJHDRrHdd5ofQ6E4cuHDw4LiYupReJ1rCBc\"]},\"/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/token/ERC677/ERC677Receiver.sol\":{\"keccak256\":\"0xc5683b28527097379ed090b28bb46e17a50a2c57ddcb3c7e028fcd04ddc64aef\",\"urls\":[\"bzz-raw://639f6b6cf65382faea738e6326d6aeb289b8b030cf02f40c54bc45ec098eda6d\",\"dweb:/ipfs/QmQi7dFcKiwUxSbzhus4CxFTdNJvUsfiqY6i3bD4RdMQrn\"]},\"/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/token/ERC677BridgeToken.sol\":{\"keccak256\":\"0x014fa09dca773b1406855e628687be50c1eb129894f45a8b5c9fc709d826968d\",\"urls\":[\"bzz-raw://23c6491c0c26471315010687d785a3724ae33198be6ed39828d1a4f7e6873cb4\",\"dweb:/ipfs/QmW62FXHtLdNGzB8Nq9XwmwHp6Jn8jgbAVyrU2j7c7w6By\"]},\"/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/token/ERC677Token.sol\":{\"keccak256\":\"0x553a103b911d77cecb2ce3f355b2370c4a23eb070593d7c8eb46f33e3a5ff141\",\"urls\":[\"bzz-raw://e37438ce280964498b77f63bbe4d1f25c55ff4c178925447a70decceda06e46c\",\"dweb:/ipfs/QmbqCLhWjZqpFBnUVb3H7LkEbAaVmhf76Ln14oWnGimYGM\"]},\"/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/token/GoodDollar.sol\":{\"keccak256\":\"0x7b91359f6912641c7dbfeced9a5c47454acce7c2cab9205d00b8049d228d7b78\",\"urls\":[\"bzz-raw://3a09bc6936d0179e2e5be2687446532d63135bc537f7ab246c6a1101d4849c1f\",\"dweb:/ipfs/QmNshqF7Xu7UX8BryKYRbnRQdTfytPappxkHq5xMxF5vpE\"]},\"/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/stakingModel/contracts/BancorFormula.sol\":{\"keccak256\":\"0xa8b83d6e46b4c2b5cf29c3572df676605ec37b8ef9b51ca6627ee225d9c51a77\",\"urls\":[\"bzz-raw://021c034dffe504492175527a436c00e898dfbf508ffb4e68f3e2a059f8934b61\",\"dweb:/ipfs/QmayhA4XBR7SYRQRRgngDcjRWUfJPmgMTbwskjZaEkznJ1\"]},\"/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/stakingModel/contracts/GoodMarketMaker.sol\":{\"keccak256\":\"0x951b08d2bf3aa8d2da3322220bdff8473457ea52845a6c76ab7732bcbccaaf9a\",\"urls\":[\"bzz-raw://7728a9ba486bddaa950c37c033522af874d518e9b53e4f844320bed6e14d41eb\",\"dweb:/ipfs/QmdEFS6efb3QFWoWhvfy9xHBvykQVbfnF6raqUsn9mhAnu\"]},\"/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/stakingModel/contracts/GoodReserveCDai.sol\":{\"keccak256\":\"0x0fa6c1c0d54d076325a80278bf47e214dbb176b63c92bd0725983a530462794e\",\"urls\":[\"bzz-raw://87efa2ad8c36bf560ab4a3e982c518dcfa1c757595b0f2aeede8f70b8fd7a398\",\"dweb:/ipfs/QmNSdgBMBDMrv7WNXYQWhRFgRpDCW7gRW8VqPArcgE9yQH\"]},\"@daostack/arc/contracts/controller/Avatar.sol\":{\"keccak256\":\"0x4e4fb9d3bc21f42fbfc6a01e9f8aa483a59e9f447b0d604f55b587a81ec09ef4\",\"urls\":[\"bzz-raw://9d3c1c7575cf6075ea1d89921f09b9b8e322b208dacaf0446cd4f64506c999f0\",\"dweb:/ipfs/QmVGDDHAR2ByuQpbgV7BBKXGEAcbaWvejpEZYzHgaagBFK\"]},\"@daostack/arc/contracts/controller/ControllerInterface.sol\":{\"keccak256\":\"0x933e92612c90f292c7b59908958b003f1a13d90b97bed0572b566353c20974dc\",\"urls\":[\"bzz-raw://ce1fcf85b744fcce2dbd4205e3943e9b4ec36a5f0330d4bbf61e65f1a3e0e470\",\"dweb:/ipfs/QmUWiLkBDdekhpy93nTzBtxDHL6yNh6sTUM9G8VbsHcBzy\"]},\"@daostack/arc/contracts/controller/DAOToken.sol\":{\"keccak256\":\"0x9b213e4e3ceeffcfc1c962a43b70b8d763d8091a2dd713fc1989b97bb68786e6\",\"urls\":[\"bzz-raw://51d1d6e85fd90f45395a16b7a3c703c4636e836041f2a13f806e4222ef2e59c1\",\"dweb:/ipfs/QmQjeCeFf7TJzsYjT5scyZUDDixBA8Yy8YppgBuxcKPDnP\"]},\"@daostack/arc/contracts/globalConstraints/GlobalConstraintInterface.sol\":{\"keccak256\":\"0xc006c4591ec10b845a56e13f6791db2c428610953034686d52b2a934b6c8f36f\",\"urls\":[\"bzz-raw://19495cd88280e54d7ddcd043ffeff75e6d3777a0c42debcd61cae448e9497ea0\",\"dweb:/ipfs/QmYxWz7CgFmmddrcVXJKfob5Ktwykc2imNVUwLSR5WR8bJ\"]},\"@daostack/arc/contracts/libs/SafeERC20.sol\":{\"keccak256\":\"0xf6727d432f67046145b078f40c1cc4f6be7b0d12a6678ecaf457edf7550d244c\",\"urls\":[\"bzz-raw://5dba7734c4fed446c084a707761cbc66ba22b8b93ef53c8d4a22a76b6e271690\",\"dweb:/ipfs/QmP2VpPKUqLh4ZZs6LaxHVpCN1zCmiorygL9bMub4mbYCw\"]},\"@daostack/infra/contracts/Reputation.sol\":{\"keccak256\":\"0x3d226dac0fe7d758f0287fb28bc25fcec1f69d19888ae3a550fa49856d61c482\",\"urls\":[\"bzz-raw://8856852c8fe0ba1c9aab326f0a9a6e7f31a238de2778fa5188e6fc399f7eb352\",\"dweb:/ipfs/QmVH4ppR9Dk7v8yxaSgeArdMv9gBBVoQxEf4E3UsqQ4rY2\"]},\"openzeppelin-solidity/contracts/access/Roles.sol\":{\"keccak256\":\"0x659ba0f9a3392cd50a8a5fafaf5dfd8c6a0878f6a4613bceff4e90dceddcd865\",\"urls\":[\"bzz-raw://4ca6617349a9b36fd82e9442a8e445ce9021a174e4399d1457ddc894ee3f5df3\",\"dweb:/ipfs/QmcmyB4cNazZ1sw963Afaijt67M9bDgwmGXCgQajGTD4tm\"]},\"openzeppelin-solidity/contracts/access/roles/MinterRole.sol\":{\"keccak256\":\"0x3199053db04cdae6c9b4380921a4a4ee720b568d6a9660883b29d25fbec31bc0\",\"urls\":[\"bzz-raw://1b0ff368e21d6007c06e4cfb286fe59d7d7d3ec06283300c9be2153ba11fa93a\",\"dweb:/ipfs/QmRPq2wZM4RAcbj31dP34GCr1CSy2qy3JqfXEkdVie4HLT\"]},\"openzeppelin-solidity/contracts/access/roles/PauserRole.sol\":{\"keccak256\":\"0x6506133e295a7199df2ac5dfc52853d9d767f68450b6d0193e9d8056b164ce86\",\"urls\":[\"bzz-raw://9c03592a9e6b1377e401b74eccf175a250232b5a341347d3fc5cb50e9bc86ba2\",\"dweb:/ipfs/QmYAr1yXT89hNUMJ37aiBpD9HtYfBDqmueVCzphRuuU7oZ\"]},\"openzeppelin-solidity/contracts/lifecycle/Pausable.sol\":{\"keccak256\":\"0x3b0ed31deeba7e3c6cfbbe8092a6b427084ee390800a06acdea5c17c8185d606\",\"urls\":[\"bzz-raw://bbdbf9d3754fcdcc85aec0432fabcec914317b1c2081b43753442ed53853a34a\",\"dweb:/ipfs/QmVHWQBn5xQkQEHhyGNEeS5gjjALZEk5ZfcjFt7kL6MoLy\"]},\"openzeppelin-solidity/contracts/math/SafeMath.sol\":{\"keccak256\":\"0x965012d27b4262d7a41f5028cbb30c51ebd9ecd4be8fb30380aaa7a3c64fbc8b\",\"urls\":[\"bzz-raw://1eb493553b27efd46c231a836a83ce50d215639feb97b4aac9f301d0fd034ff5\",\"dweb:/ipfs/QmbMdvSXcqGKxeeYvzF3VrWpoHQyVzMXBhzhAokF2Gdymv\"]},\"openzeppelin-solidity/contracts/ownership/Ownable.sol\":{\"keccak256\":\"0x980de387a1a020a498f53d00f89fecebb12c949a17e8f160093c0303ede2b786\",\"urls\":[\"bzz-raw://f07a2c393caa85f62f0aaa461e3edd50aa59371d4209778ba0558d7f8b4b856c\",\"dweb:/ipfs/QmeN3ZiYGSjCnQFeYaJNgoXjF9eDue1g3e9pqManRkeBtV\"]},\"openzeppelin-solidity/contracts/token/ERC20/ERC20.sol\":{\"keccak256\":\"0xba431353cb4fe70777ac026231eb5468e41aa1e81240a2b8136917acc5fff4dc\",\"urls\":[\"bzz-raw://f40c91ca270bdc9b156f339081a0fc2bbcf73cf5f62b8c73ba555df753ff6619\",\"dweb:/ipfs/QmT8y2VVjGaFdGphpcXrgvdPi2EgF9LuCDgJiJ89LvpFRV\"]},\"openzeppelin-solidity/contracts/token/ERC20/ERC20Burnable.sol\":{\"keccak256\":\"0xa3e68fd7f987c8fbdaf4867d428a69a15f3cf2f69709a5b0a0fbef750b0e6fbc\",\"urls\":[\"bzz-raw://50b1ff986d3b2793850a66c8429d9886fdfb134b1509b3e98714e3e2a71e24f5\",\"dweb:/ipfs/QmSQBYPeY9tbR3ciGRNQqvcWKnNiuxtVMq2MsPWpLwuGGm\"]},\"openzeppelin-solidity/contracts/token/ERC20/ERC20Detailed.sol\":{\"keccak256\":\"0xe195405e9993d575173cdb5dd408db7459a026b9a98085c1a3b676f020f46584\",\"urls\":[\"bzz-raw://f6beab874b52e710d2c42334e34bb5592146f7dd148d96ff32c0c474412bf2f4\",\"dweb:/ipfs/QmUKmVUX4Fif7dguPgC459cpGegiJd1s24YhgZUrBUkkDN\"]},\"openzeppelin-solidity/contracts/token/ERC20/ERC20Mintable.sol\":{\"keccak256\":\"0xc4ca2883e0b0743604143952024c250bb13737ad54bb666b117efdcb766fe3a8\",\"urls\":[\"bzz-raw://bdaf72028f2dc29aa5191b2bfca315a9e3b1d58f900166bdb5ae5f500d569384\",\"dweb:/ipfs/QmZngPiWLXA9i2vp6XNPcGA23GHxT99V1Qma6iRivtbREy\"]},\"openzeppelin-solidity/contracts/token/ERC20/ERC20Pausable.sol\":{\"keccak256\":\"0x37b840977505e5f6d74bc8fa3d0217facc7913d0ecf064da3e3b26494acd37de\",\"urls\":[\"bzz-raw://7456513521bae915089dfd5879b685e47f3f180ad9ffe24cc3b19275b1da28ed\",\"dweb:/ipfs/QmbM1avKkyyTHEeTs3CqheyZwgAMNzVi3iDudqBdUJ2WPM\"]},\"openzeppelin-solidity/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x079c4e23ee448f529e43bfa3c4e8fb4be52cd0318ee923a276835bedf45b93d8\",\"urls\":[\"bzz-raw://ee762ff5b7746e41d27dcbcea00c7a3034b58adb1b45ddadddb5b721aff450df\",\"dweb:/ipfs/QmdxqtgEFZjHCoiYyz6pUAQ5iBm7As25jcyEbZoTaAgyDa\"]},\"openzeppelin-solidity/contracts/utils/Address.sol\":{\"keccak256\":\"0x5c731061b804fa256fc8c05150eafe5d20b6bb94541a8f187912bf84f7033f34\",\"urls\":[\"bzz-raw://a3c2d9f046beebab7fb41b1b124a6a124a36f510f7c67365861402ac831bdc71\",\"dweb:/ipfs/QmUtASRgitregbKH83anopLtF9vFQe3BKeAjhUa6F7t9YV\"]}},\"version\":1}",
  "bytecode": "0x",
  "deployedBytecode": "0x",
  "sourceMap": "",
  "deployedSourceMap": "",
  "source": "pragma solidity >0.5.4;\n\nimport \"openzeppelin-solidity/contracts/math/SafeMath.sol\";\nimport \"openzeppelin-solidity/contracts/token/ERC20/ERC20.sol\";\nimport \"openzeppelin-solidity/contracts/token/ERC20/ERC20Mintable.sol\";\nimport \"openzeppelin-solidity/contracts/token/ERC20/ERC20Burnable.sol\";\nimport \"@daostack/arc/contracts/controller/Avatar.sol\";\nimport \"../../contracts/dao/schemes/FeelessScheme.sol\";\nimport \"../../contracts/dao/schemes/ActivePeriod.sol\";\nimport \"../../contracts/DSMath.sol\";\nimport \"../../contracts/token/GoodDollar.sol\";\nimport \"./GoodMarketMaker.sol\";\n\ninterface cERC20 {\n    function mint(uint256 mintAmount) external returns (uint256);\n\n    function redeemUnderlying(uint256 mintAmount) external returns (uint256);\n\n    function exchangeRateCurrent() external returns (uint256);\n\n    function exchangeRateStored() external view returns (uint256);\n\n    function balanceOf(address addr) external view returns (uint256);\n\n    function transfer(address to, uint256 amount) external returns (bool);\n}\n\ninterface ContributionCalc {\n    function calculateContribution(\n        GoodMarketMaker _marketMaker,\n        GoodReserveCDai _reserve,\n        address _contributer,\n        ERC20 _token,\n        uint256 _gdAmount\n    ) external view returns (uint256);\n}\n\n/**\n@title Reserve based on cDAI and dynamic reserve ratio market maker\n*/\ncontract GoodReserveCDai is DSMath, FeelessScheme, ActivePeriod {\n    using SafeMath for uint256;\n\n    // DAI token address\n    ERC20 public dai;\n\n    // cDAI token address\n    cERC20 public cDai;\n\n    // The address of the market maker contract\n    // which makes the calculations and holds\n    // the token and accounts info\n    GoodMarketMaker public marketMaker;\n\n    // The fund manager receives the minted tokens\n    // when executing `mintInterestAndUBI`\n    address public fundManager;\n\n    // The block interval defines the number of\n    // blocks that shall be passed before the\n    // next execution of `mintInterestAndUBI`\n    uint256 public blockInterval;\n\n    // The last block number which\n    // `mintInterestAndUBI` has been executed in\n    uint256 public lastMinted;\n\n    // The contribution contract is responsible\n    // for calculates the contribution amount\n    // when selling GD\n    ContributionCalc public contribution;\n\n    modifier onlyFundManager {\n        require(msg.sender == fundManager, \"Only FundManager can call this method\");\n        _;\n    }\n\n    modifier onlyCDai(ERC20 token) {\n        require(address(token) == address(cDai), \"Only cDAI is supported\");\n        _;\n    }\n\n    // Emits when GD tokens are purchased\n    event TokenPurchased(\n        // The initiate of the action\n        address indexed caller,\n        // The convertible token address\n        // which the GD tokens were\n        // purchased with\n        address indexed reserveToken,\n        // Reserve tokens amount\n        uint256 reserveAmount,\n        // Minimal GD return that was\n        // permitted by the caller\n        uint256 minReturn,\n        // Actual return after the\n        // conversion\n        uint256 actualReturn\n    );\n\n    // Emits when GD tokens are sold\n    event TokenSold(\n        // The initiate of the action\n        address indexed caller,\n        // The convertible token address\n        // which the GD tokens were\n        // sold to\n        address indexed reserveToken,\n        // GD tokens amount\n        uint256 gdAmount,\n        // The amount of GD tokens that\n        // was contributed during the\n        // conversion\n        uint256 contributionAmount,\n        // Minimal reserve tokens return\n        // that was permitted by the caller\n        uint256 minReturn,\n        // Actual return after the\n        // conversion\n        uint256 actualReturn\n    );\n\n    // Emits when the contribution contract\n    // address is updated\n    event ContributionAddressUpdated(\n        // The initiate of the action\n        address indexed caller,\n        // Previous contribution\n        // contract address\n        address prevAddress,\n        // The updated contribution\n        // contract address\n        address newAddress\n    );\n\n    // Emits when new GD tokens minted\n    event UBIMinted(\n        //epoch of UBI\n        uint256 indexed day,\n        //the token paid as interest\n        address indexed interestToken,\n        //wei amount of interest paid in interestToken\n        uint256 interestReceived,\n        // Amount of GD tokens that was\n        // added to the supply as a result\n        // of `mintInterest`\n        uint256 gdInterestMinted,\n        // Amount of GD tokens that was\n        // added to the supply as a result\n        // of `mintExpansion`\n        uint256 gdExpansionMinted,\n        // Amount of GD tokens that was\n        // minted to the `interestCollector`\n        uint256 gdInterestTransferred,\n        // Amount of GD tokens that was\n        // minted to the `ubiCollector`\n        uint256 gdUbiTransferred\n    );\n\n    /**\n     * @dev Constructor\n     * @param _dai The address of DAI\n     * @param _cDai The address of cDAI\n     * @param _fundManager The address of the fund manager contract\n     * @param _avatar The avatar of the DAO\n     * @param _identity The identity contract\n     * @param _marketMaker The address of the market maker contract\n     * @param _contribution The address of the contribution contract\n     * @param _blockInterval How many blocks should be passed before the next execution of `mintInterestAndUBI`\n     */\n    constructor(\n        ERC20 _dai,\n        cERC20 _cDai,\n        address _fundManager,\n        Avatar _avatar,\n        Identity _identity,\n        address _marketMaker,\n        ContributionCalc _contribution,\n        uint256 _blockInterval\n    ) public FeelessScheme(_identity, _avatar) ActivePeriod(now, now * 2, _avatar) {\n        dai = _dai;\n        cDai = _cDai;\n        fundManager = _fundManager;\n        marketMaker = GoodMarketMaker(_marketMaker);\n        blockInterval = _blockInterval;\n        lastMinted = block.number.div(blockInterval);\n        contribution = _contribution;\n    }\n\n    /**\n     * @dev Start function. Adds this contract to identity as a feeless scheme.\n     * Can only be called if scheme is registered\n     */\n    function start() public onlyRegistered {\n        addRights();\n\n        // Adds the reserve as a minter of the GD token\n        controller.genericCall(\n            address(avatar.nativeToken()),\n            abi.encodeWithSignature(\"addMinter(address)\", address(this)),\n            avatar,\n            0\n        );\n        super.start();\n    }\n\n    /**\n     * @dev Allows the DAO to change the market maker contract\n     * @param _marketMaker address of the new contract\n     */\n    function setMarketMaker(address _marketMaker) public onlyAvatar {\n        marketMaker = GoodMarketMaker(_marketMaker);\n    }\n\n    /**\n     * @dev Allows the DAO to change the fund manager contract\n     * @param _fundManager address of the new contract\n     */\n    function setFundManager(address _fundManager) public onlyAvatar {\n        fundManager = _fundManager;\n    }\n\n    /**\n     * @dev Allows the DAO to change the block interval\n     * @param _blockInterval the new value\n     */\n    function setBlockInterval(uint256 _blockInterval) public onlyAvatar {\n        blockInterval = _blockInterval;\n    }\n\n    /**\n     * @dev Allows the DAO to change the contribution formula contract\n     * @param _contribution address of the new contribution contract\n     */\n    function setContributionAddress(address _contribution) public onlyAvatar {\n        address prevAddress = address(contribution);\n        contribution = ContributionCalc(_contribution);\n        emit ContributionAddressUpdated(msg.sender, prevAddress, _contribution);\n    }\n\n    /**\n     * @dev Converts `buyWith` tokens to GD tokens and updates the bonding curve params.\n     * `buy` occurs only if the GD return is above the given minimum. It is possible\n     * to buy only with cDAI and when the contract is set to active. MUST call to\n     * `buyWith` `approve` prior this action to allow this contract to accomplish the\n     * conversion.\n     * @param _buyWith The tokens that should be converted to GD tokens\n     * @param _tokenAmount The amount of `buyWith` tokens that should be converted to GD tokens\n     * @param _minReturn The minimum allowed return in GD tokens\n     * @return (gdReturn) How much GD tokens were transferred\n     */\n    function buy(\n        ERC20 _buyWith,\n        uint256 _tokenAmount,\n        uint256 _minReturn\n    ) public requireActive onlyCDai(_buyWith) returns (uint256) {\n        require(\n            _buyWith.allowance(msg.sender, address(this)) >= _tokenAmount,\n            \"You need to approve cDAI transfer first\"\n        );\n        require(\n            _buyWith.transferFrom(msg.sender, address(this), _tokenAmount) == true,\n            \"transferFrom failed, make sure you approved cDAI transfer\"\n        );\n        uint256 gdReturn = marketMaker.buy(_buyWith, _tokenAmount);\n        require(gdReturn >= _minReturn, \"GD return must be above the minReturn\");\n        ERC20Mintable(address(avatar.nativeToken())).mint(msg.sender, gdReturn);\n        emit TokenPurchased(\n            msg.sender,\n            address(_buyWith),\n            _tokenAmount,\n            _minReturn,\n            gdReturn\n        );\n        return gdReturn;\n    }\n\n    /**\n     * @dev Converts GD tokens to `sellTo` tokens and update the bonding curve params.\n     * `sell` occurs only if the token return is above the given minimum. Notice that\n     * there is a contribution amount from the given GD that remains in the reserve.\n     * It is only possible to sell to cDAI and only when the contract is set to\n     * active. MUST be called to G$ `approve` prior to this action to allow this\n     * contract to accomplish the conversion.\n     * @param _sellTo The tokens that will be received after the conversion\n     * @param _gdAmount The amount of GD tokens that should be converted to `_sellTo` tokens\n     * @param _minReturn The minimum allowed `sellTo` tokens return\n     * @return (tokenReturn) How much `sellTo` tokens were transferred\n     */\n    function sell(\n        ERC20 _sellTo,\n        uint256 _gdAmount,\n        uint256 _minReturn\n    ) public requireActive onlyCDai(_sellTo) returns (uint256) {\n        ERC20Burnable(address(avatar.nativeToken())).burnFrom(msg.sender, _gdAmount);\n        uint256 contributionAmount = contribution.calculateContribution(\n            marketMaker,\n            this,\n            msg.sender,\n            _sellTo,\n            _gdAmount\n        );\n        uint256 tokenReturn = marketMaker.sellWithContribution(\n            _sellTo,\n            _gdAmount,\n            contributionAmount\n        );\n        require(tokenReturn >= _minReturn, \"Token return must be above the minReturn\");\n        require(_sellTo.transfer(msg.sender, tokenReturn) == true, \"Transfer failed\");\n        emit TokenSold(\n            msg.sender,\n            address(_sellTo),\n            _gdAmount,\n            contributionAmount,\n            _minReturn,\n            tokenReturn\n        );\n        return tokenReturn;\n    }\n\n    /**\n     * @dev Current price of GD in `token`. currently only cDAI is supported.\n     * @param _token The desired reserve token to have\n     * @return price of GD\n     */\n    function currentPrice(ERC20 _token) public view returns (uint256) {\n        return marketMaker.currentPrice(_token);\n    }\n\n    /**\n     * @dev Checks if enough blocks have passed so it would be possible to\n     * execute `mintInterestAndUBI` according to the length of `blockInterval`\n     * @return (bool) True if enough blocks have passed\n     */\n    function canMint() public view returns (bool) {\n        return block.number.div(blockInterval) > lastMinted;\n    }\n\n    /**\n     * @dev Anyone can call this to trigger calculations.\n     * Reserve sends UBI to Avatar DAO and returns interest to FundManager.\n     * @param _interestToken The token that was transfered to the reserve\n     * @param _transfered How much was transfered to the reserve for UBI in `_interestToken`\n     * @param _interest Out of total transfered how much is the interest (in `_interestToken`)\n     * that needs to be paid back (some interest might be donated)\n     * @return (gdInterest, gdUBI) How much GD interest was minted and how much GD UBI was minted\n     */\n    function mintInterestAndUBI(\n        ERC20 _interestToken,\n        uint256 _transfered,\n        uint256 _interest\n    )\n        public\n        requireActive\n        onlyCDai(_interestToken)\n        onlyFundManager\n        returns (uint256, uint256)\n    {\n        require(canMint(), \"Need to wait for the next interval\");\n        uint256 price = currentPrice(_interestToken);\n        uint256 gdInterestToMint = marketMaker.mintInterest(_interestToken, _transfered);\n        GoodDollar gooddollar = GoodDollar(address(avatar.nativeToken()));\n        uint256 precisionLoss = uint256(27).sub(uint256(gooddollar.decimals()));\n        uint256 gdInterest = rdiv(_interest, price).div(10**precisionLoss);\n        uint256 gdExpansionToMint = marketMaker.mintExpansion(_interestToken);\n        uint256 gdUBI = gdInterestToMint.sub(gdInterest);\n        gdUBI = gdUBI.add(gdExpansionToMint);\n        uint256 toMint = gdUBI.add(gdInterest);\n        ERC20Mintable(address(avatar.nativeToken())).mint(fundManager, toMint);\n        lastMinted = block.number.div(blockInterval);\n        emit UBIMinted(\n            lastMinted,\n            address(_interestToken),\n            _transfered,\n            gdInterestToMint,\n            gdExpansionToMint,\n            gdInterest,\n            gdUBI\n        );\n        return (gdInterest, gdUBI);\n    }\n\n    /**\n     * @dev Making the contract inactive after it has transferred the cDAI funds to `_avatar`\n     * and has transferred the market maker ownership to `_avatar`. Inactive means that\n     * buy / sell / mintInterestAndUBI actions will no longer be active. Only the Avatar can\n     * executes this method\n     */\n    function end() public onlyAvatar {\n        // remaining cDAI tokens in the current reserve contract\n        uint256 remainingReserve = cDai.balanceOf(address(this));\n        if (remainingReserve > 0) {\n            require(\n                cDai.transfer(address(avatar), remainingReserve),\n                \"cdai transfer failed\"\n            );\n        }\n        require(cDai.balanceOf(address(this)) == 0, \"Funds transfer has failed\");\n        GoodDollar gooddollar = GoodDollar(address(avatar.nativeToken()));\n        marketMaker.transferOwnership(address(avatar));\n        gooddollar.renounceMinter();\n        super.internalEnd(avatar);\n    }\n\n    /**\n     * @dev method to recover any stuck erc20 tokens (ie compound COMP)\n     * @param _token the ERC20 token to recover\n     */\n    function recover(ERC20 _token) public onlyAvatar {\n        require(\n            _token.transfer(address(avatar), _token.balanceOf(address(this))),\n            \"recover transfer failed\"\n        );\n    }\n}\n",
  "sourcePath": "/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/stakingModel/contracts/GoodReserveCDai.sol",
  "ast": {
    "absolutePath": "/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/stakingModel/contracts/GoodReserveCDai.sol",
    "exportedSymbols": {
      "ContributionCalc": [
        8343
      ],
      "GoodReserveCDai": [
        9043
      ],
      "cERC20": [
        8327
      ]
    },
    "id": 9044,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 8276,
        "literals": [
          "solidity",
          ">",
          "0.5",
          ".4"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:26"
      },
      {
        "absolutePath": "openzeppelin-solidity/contracts/math/SafeMath.sol",
        "file": "openzeppelin-solidity/contracts/math/SafeMath.sol",
        "id": 8277,
        "nodeType": "ImportDirective",
        "scope": 9044,
        "sourceUnit": 21309,
        "src": "25:59:26",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "openzeppelin-solidity/contracts/token/ERC20/ERC20.sol",
        "file": "openzeppelin-solidity/contracts/token/ERC20/ERC20.sol",
        "id": 8278,
        "nodeType": "ImportDirective",
        "scope": 9044,
        "sourceUnit": 21850,
        "src": "85:63:26",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "openzeppelin-solidity/contracts/token/ERC20/ERC20Mintable.sol",
        "file": "openzeppelin-solidity/contracts/token/ERC20/ERC20Mintable.sol",
        "id": 8279,
        "nodeType": "ImportDirective",
        "scope": 9044,
        "sourceUnit": 21967,
        "src": "149:71:26",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "openzeppelin-solidity/contracts/token/ERC20/ERC20Burnable.sol",
        "file": "openzeppelin-solidity/contracts/token/ERC20/ERC20Burnable.sol",
        "id": 8280,
        "nodeType": "ImportDirective",
        "scope": 9044,
        "sourceUnit": 21881,
        "src": "221:71:26",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@daostack/arc/contracts/controller/Avatar.sol",
        "file": "@daostack/arc/contracts/controller/Avatar.sol",
        "id": 8281,
        "nodeType": "ImportDirective",
        "scope": 9044,
        "sourceUnit": 12706,
        "src": "293:55:26",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/dao/schemes/FeelessScheme.sol",
        "file": "../../contracts/dao/schemes/FeelessScheme.sol",
        "id": 8282,
        "nodeType": "ImportDirective",
        "scope": 9044,
        "sourceUnit": 1228,
        "src": "349:55:26",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/dao/schemes/ActivePeriod.sol",
        "file": "../../contracts/dao/schemes/ActivePeriod.sol",
        "id": 8283,
        "nodeType": "ImportDirective",
        "scope": 9044,
        "sourceUnit": 1005,
        "src": "405:54:26",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/DSMath.sol",
        "file": "../../contracts/DSMath.sol",
        "id": 8284,
        "nodeType": "ImportDirective",
        "scope": 9044,
        "sourceUnit": 304,
        "src": "460:36:26",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/token/GoodDollar.sol",
        "file": "../../contracts/token/GoodDollar.sol",
        "id": 8285,
        "nodeType": "ImportDirective",
        "scope": 9044,
        "sourceUnit": 3768,
        "src": "497:46:26",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/stakingModel/contracts/GoodMarketMaker.sol",
        "file": "./GoodMarketMaker.sol",
        "id": 8286,
        "nodeType": "ImportDirective",
        "scope": 9044,
        "sourceUnit": 8275,
        "src": "544:31:26",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "interface",
        "documentation": null,
        "fullyImplemented": false,
        "id": 8327,
        "linearizedBaseContracts": [
          8327
        ],
        "name": "cERC20",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": null,
            "documentation": null,
            "id": 8293,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "mint",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8289,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8288,
                  "name": "mintAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 8293,
                  "src": "614:18:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8287,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "614:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "613:20:26"
            },
            "returnParameters": {
              "id": 8292,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8291,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8293,
                  "src": "652:7:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8290,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "652:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "651:9:26"
            },
            "scope": 8327,
            "src": "600:61:26",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": null,
            "id": 8300,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "redeemUnderlying",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8296,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8295,
                  "name": "mintAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 8300,
                  "src": "693:18:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8294,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "693:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "692:20:26"
            },
            "returnParameters": {
              "id": 8299,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8298,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8300,
                  "src": "731:7:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8297,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "731:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "730:9:26"
            },
            "scope": 8327,
            "src": "667:73:26",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": null,
            "id": 8305,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "exchangeRateCurrent",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8301,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "774:2:26"
            },
            "returnParameters": {
              "id": 8304,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8303,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8305,
                  "src": "795:7:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8302,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "795:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "794:9:26"
            },
            "scope": 8327,
            "src": "746:58:26",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": null,
            "id": 8310,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "exchangeRateStored",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8306,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "837:2:26"
            },
            "returnParameters": {
              "id": 8309,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8308,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8310,
                  "src": "863:7:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8307,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "863:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "862:9:26"
            },
            "scope": 8327,
            "src": "810:62:26",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": null,
            "id": 8317,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "balanceOf",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8313,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8312,
                  "name": "addr",
                  "nodeType": "VariableDeclaration",
                  "scope": 8317,
                  "src": "897:12:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8311,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "897:7:26",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "896:14:26"
            },
            "returnParameters": {
              "id": 8316,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8315,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8317,
                  "src": "934:7:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8314,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "934:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "933:9:26"
            },
            "scope": 8327,
            "src": "878:65:26",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": null,
            "id": 8326,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "transfer",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8322,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8319,
                  "name": "to",
                  "nodeType": "VariableDeclaration",
                  "scope": 8326,
                  "src": "967:10:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8318,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "967:7:26",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8321,
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 8326,
                  "src": "979:14:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8320,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "979:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "966:28:26"
            },
            "returnParameters": {
              "id": 8325,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8324,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8326,
                  "src": "1013:4:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 8323,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "1013:4:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1012:6:26"
            },
            "scope": 8327,
            "src": "949:70:26",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          }
        ],
        "scope": 9044,
        "src": "577:444:26"
      },
      {
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "interface",
        "documentation": null,
        "fullyImplemented": false,
        "id": 8343,
        "linearizedBaseContracts": [
          8343
        ],
        "name": "ContributionCalc",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": null,
            "documentation": null,
            "id": 8342,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "calculateContribution",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8338,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8329,
                  "name": "_marketMaker",
                  "nodeType": "VariableDeclaration",
                  "scope": 8342,
                  "src": "1096:28:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_GoodMarketMaker_$8274",
                    "typeString": "contract GoodMarketMaker"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8328,
                    "name": "GoodMarketMaker",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 8274,
                    "src": "1096:15:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_GoodMarketMaker_$8274",
                      "typeString": "contract GoodMarketMaker"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8331,
                  "name": "_reserve",
                  "nodeType": "VariableDeclaration",
                  "scope": 8342,
                  "src": "1134:24:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_GoodReserveCDai_$9043",
                    "typeString": "contract GoodReserveCDai"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8330,
                    "name": "GoodReserveCDai",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 9043,
                    "src": "1134:15:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_GoodReserveCDai_$9043",
                      "typeString": "contract GoodReserveCDai"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8333,
                  "name": "_contributer",
                  "nodeType": "VariableDeclaration",
                  "scope": 8342,
                  "src": "1168:20:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8332,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1168:7:26",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8335,
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 8342,
                  "src": "1198:12:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ERC20_$21849",
                    "typeString": "contract ERC20"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8334,
                    "name": "ERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21849,
                    "src": "1198:5:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$21849",
                      "typeString": "contract ERC20"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8337,
                  "name": "_gdAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 8342,
                  "src": "1220:17:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8336,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1220:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1086:157:26"
            },
            "returnParameters": {
              "id": 8341,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8340,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8342,
                  "src": "1267:7:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8339,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1267:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1266:9:26"
            },
            "scope": 8343,
            "src": "1056:220:26",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          }
        ],
        "scope": 9044,
        "src": "1023:255:26"
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 8344,
              "name": "DSMath",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 303,
              "src": "1383:6:26",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_DSMath_$303",
                "typeString": "contract DSMath"
              }
            },
            "id": 8345,
            "nodeType": "InheritanceSpecifier",
            "src": "1383:6:26"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 8346,
              "name": "FeelessScheme",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 1227,
              "src": "1391:13:26",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_FeelessScheme_$1227",
                "typeString": "contract FeelessScheme"
              }
            },
            "id": 8347,
            "nodeType": "InheritanceSpecifier",
            "src": "1391:13:26"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 8348,
              "name": "ActivePeriod",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 1004,
              "src": "1406:12:26",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ActivePeriod_$1004",
                "typeString": "contract ActivePeriod"
              }
            },
            "id": 8349,
            "nodeType": "InheritanceSpecifier",
            "src": "1406:12:26"
          }
        ],
        "contractDependencies": [
          303,
          1004,
          1227,
          1423,
          2667,
          21417
        ],
        "contractKind": "contract",
        "documentation": "@title Reserve based on cDAI and dynamic reserve ratio market maker",
        "fullyImplemented": true,
        "id": 9043,
        "linearizedBaseContracts": [
          9043,
          1004,
          1227,
          2667,
          1423,
          21417,
          303
        ],
        "name": "GoodReserveCDai",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "id": 8352,
            "libraryName": {
              "contractScope": null,
              "id": 8350,
              "name": "SafeMath",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 21308,
              "src": "1431:8:26",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_SafeMath_$21308",
                "typeString": "library SafeMath"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "1425:27:26",
            "typeName": {
              "id": 8351,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1444:7:26",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            }
          },
          {
            "constant": false,
            "id": 8354,
            "name": "dai",
            "nodeType": "VariableDeclaration",
            "scope": 9043,
            "src": "1483:16:26",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_ERC20_$21849",
              "typeString": "contract ERC20"
            },
            "typeName": {
              "contractScope": null,
              "id": 8353,
              "name": "ERC20",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 21849,
              "src": "1483:5:26",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ERC20_$21849",
                "typeString": "contract ERC20"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 8356,
            "name": "cDai",
            "nodeType": "VariableDeclaration",
            "scope": 9043,
            "src": "1532:18:26",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_cERC20_$8327",
              "typeString": "contract cERC20"
            },
            "typeName": {
              "contractScope": null,
              "id": 8355,
              "name": "cERC20",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 8327,
              "src": "1532:6:26",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_cERC20_$8327",
                "typeString": "contract cERC20"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 8358,
            "name": "marketMaker",
            "nodeType": "VariableDeclaration",
            "scope": 9043,
            "src": "1686:34:26",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_GoodMarketMaker_$8274",
              "typeString": "contract GoodMarketMaker"
            },
            "typeName": {
              "contractScope": null,
              "id": 8357,
              "name": "GoodMarketMaker",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 8274,
              "src": "1686:15:26",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_GoodMarketMaker_$8274",
                "typeString": "contract GoodMarketMaker"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 8360,
            "name": "fundManager",
            "nodeType": "VariableDeclaration",
            "scope": 9043,
            "src": "1821:26:26",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 8359,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "1821:7:26",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 8362,
            "name": "blockInterval",
            "nodeType": "VariableDeclaration",
            "scope": 9043,
            "src": "1994:28:26",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 8361,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1994:7:26",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 8364,
            "name": "lastMinted",
            "nodeType": "VariableDeclaration",
            "scope": 9043,
            "src": "2113:25:26",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 8363,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "2113:7:26",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 8366,
            "name": "contribution",
            "nodeType": "VariableDeclaration",
            "scope": 9043,
            "src": "2262:36:26",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_ContributionCalc_$8343",
              "typeString": "contract ContributionCalc"
            },
            "typeName": {
              "contractScope": null,
              "id": 8365,
              "name": "ContributionCalc",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 8343,
              "src": "2262:16:26",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ContributionCalc_$8343",
                "typeString": "contract ContributionCalc"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 8377,
              "nodeType": "Block",
              "src": "2330:103:26",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 8372,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 8369,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 22171,
                            "src": "2348:3:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 8370,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "2348:10:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 8371,
                          "name": "fundManager",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8360,
                          "src": "2362:11:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "2348:25:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4f6e6c792046756e644d616e616765722063616e2063616c6c2074686973206d6574686f64",
                        "id": 8373,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2375:39:26",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_8659903c14beb1decb5cde807aae2b42823801f7a2ec9f1cb2d42f84ff652fab",
                          "typeString": "literal_string \"Only FundManager can call this method\""
                        },
                        "value": "Only FundManager can call this method"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_8659903c14beb1decb5cde807aae2b42823801f7a2ec9f1cb2d42f84ff652fab",
                          "typeString": "literal_string \"Only FundManager can call this method\""
                        }
                      ],
                      "id": 8368,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        22174,
                        22175
                      ],
                      "referencedDeclaration": 22175,
                      "src": "2340:7:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 8374,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2340:75:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8375,
                  "nodeType": "ExpressionStatement",
                  "src": "2340:75:26"
                },
                {
                  "id": 8376,
                  "nodeType": "PlaceholderStatement",
                  "src": "2425:1:26"
                }
              ]
            },
            "documentation": null,
            "id": 8378,
            "name": "onlyFundManager",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 8367,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2330:0:26"
            },
            "src": "2305:128:26",
            "visibility": "internal"
          },
          {
            "body": {
              "id": 8394,
              "nodeType": "Block",
              "src": "2470:94:26",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 8389,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 8384,
                              "name": "token",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8380,
                              "src": "2496:5:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ERC20_$21849",
                                "typeString": "contract ERC20"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_ERC20_$21849",
                                "typeString": "contract ERC20"
                              }
                            ],
                            "id": 8383,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "2488:7:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 8385,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2488:14:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 8387,
                              "name": "cDai",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8356,
                              "src": "2514:4:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_cERC20_$8327",
                                "typeString": "contract cERC20"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_cERC20_$8327",
                                "typeString": "contract cERC20"
                              }
                            ],
                            "id": 8386,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "2506:7:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 8388,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2506:13:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "2488:31:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4f6e6c79206344414920697320737570706f72746564",
                        "id": 8390,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2521:24:26",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_6611800b21faf1cbaf099b967ab2df71f07063bb467267da93bacb005dc2712f",
                          "typeString": "literal_string \"Only cDAI is supported\""
                        },
                        "value": "Only cDAI is supported"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_6611800b21faf1cbaf099b967ab2df71f07063bb467267da93bacb005dc2712f",
                          "typeString": "literal_string \"Only cDAI is supported\""
                        }
                      ],
                      "id": 8382,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        22174,
                        22175
                      ],
                      "referencedDeclaration": 22175,
                      "src": "2480:7:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 8391,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2480:66:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8392,
                  "nodeType": "ExpressionStatement",
                  "src": "2480:66:26"
                },
                {
                  "id": 8393,
                  "nodeType": "PlaceholderStatement",
                  "src": "2556:1:26"
                }
              ]
            },
            "documentation": null,
            "id": 8395,
            "name": "onlyCDai",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 8381,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8380,
                  "name": "token",
                  "nodeType": "VariableDeclaration",
                  "scope": 8395,
                  "src": "2457:11:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ERC20_$21849",
                    "typeString": "contract ERC20"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8379,
                    "name": "ERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21849,
                    "src": "2457:5:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$21849",
                      "typeString": "contract ERC20"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2456:13:26"
            },
            "src": "2439:125:26",
            "visibility": "internal"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 8407,
            "name": "TokenPurchased",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 8406,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8397,
                  "indexed": true,
                  "name": "caller",
                  "nodeType": "VariableDeclaration",
                  "scope": 8407,
                  "src": "2680:22:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8396,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2680:7:26",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8399,
                  "indexed": true,
                  "name": "reserveToken",
                  "nodeType": "VariableDeclaration",
                  "scope": 8407,
                  "src": "2815:28:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8398,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2815:7:26",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8401,
                  "indexed": false,
                  "name": "reserveAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 8407,
                  "src": "2886:21:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8400,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2886:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8403,
                  "indexed": false,
                  "name": "minReturn",
                  "nodeType": "VariableDeclaration",
                  "scope": 8407,
                  "src": "2990:17:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8402,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2990:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8405,
                  "indexed": false,
                  "name": "actualReturn",
                  "nodeType": "VariableDeclaration",
                  "scope": 8407,
                  "src": "3074:20:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8404,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3074:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2632:468:26"
            },
            "src": "2612:489:26"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 8421,
            "name": "TokenSold",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 8420,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8409,
                  "indexed": true,
                  "name": "caller",
                  "nodeType": "VariableDeclaration",
                  "scope": 8421,
                  "src": "3207:22:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8408,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3207:7:26",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8411,
                  "indexed": true,
                  "name": "reserveToken",
                  "nodeType": "VariableDeclaration",
                  "scope": 8421,
                  "src": "3335:28:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8410,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3335:7:26",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8413,
                  "indexed": false,
                  "name": "gdAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 8421,
                  "src": "3401:16:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8412,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3401:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8415,
                  "indexed": false,
                  "name": "contributionAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 8421,
                  "src": "3527:26:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8414,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3527:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8417,
                  "indexed": false,
                  "name": "minReturn",
                  "nodeType": "VariableDeclaration",
                  "scope": 8421,
                  "src": "3648:17:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8416,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3648:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8419,
                  "indexed": false,
                  "name": "actualReturn",
                  "nodeType": "VariableDeclaration",
                  "scope": 8421,
                  "src": "3732:20:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8418,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3732:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3159:599:26"
            },
            "src": "3144:615:26"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 8429,
            "name": "ContributionAddressUpdated",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 8428,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8423,
                  "indexed": true,
                  "name": "caller",
                  "nodeType": "VariableDeclaration",
                  "scope": 8429,
                  "src": "3915:22:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8422,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3915:7:26",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8425,
                  "indexed": false,
                  "name": "prevAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 8429,
                  "src": "4008:19:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8424,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4008:7:26",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8427,
                  "indexed": false,
                  "name": "newAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 8429,
                  "src": "4101:18:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8426,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4101:7:26",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3867:258:26"
            },
            "src": "3835:291:26"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 8445,
            "name": "UBIMinted",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 8444,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8431,
                  "indexed": true,
                  "name": "day",
                  "nodeType": "VariableDeclaration",
                  "scope": 8445,
                  "src": "4219:19:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8430,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4219:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8433,
                  "indexed": true,
                  "name": "interestToken",
                  "nodeType": "VariableDeclaration",
                  "scope": 8445,
                  "src": "4285:29:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8432,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4285:7:26",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8435,
                  "indexed": false,
                  "name": "interestReceived",
                  "nodeType": "VariableDeclaration",
                  "scope": 8445,
                  "src": "4379:24:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8434,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4379:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8437,
                  "indexed": false,
                  "name": "gdInterestMinted",
                  "nodeType": "VariableDeclaration",
                  "scope": 8445,
                  "src": "4525:24:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8436,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4525:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8439,
                  "indexed": false,
                  "name": "gdExpansionMinted",
                  "nodeType": "VariableDeclaration",
                  "scope": 8445,
                  "src": "4672:25:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8438,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4672:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8441,
                  "indexed": false,
                  "name": "gdInterestTransferred",
                  "nodeType": "VariableDeclaration",
                  "scope": 8445,
                  "src": "4792:29:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8440,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4792:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8443,
                  "indexed": false,
                  "name": "gdUbiTransferred",
                  "nodeType": "VariableDeclaration",
                  "scope": 8445,
                  "src": "4911:24:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8442,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4911:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4186:755:26"
            },
            "src": "4171:771:26"
          },
          {
            "body": {
              "id": 8509,
              "nodeType": "Block",
              "src": "5794:270:26",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8477,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 8475,
                      "name": "dai",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8354,
                      "src": "5804:3:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ERC20_$21849",
                        "typeString": "contract ERC20"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 8476,
                      "name": "_dai",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8447,
                      "src": "5810:4:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ERC20_$21849",
                        "typeString": "contract ERC20"
                      }
                    },
                    "src": "5804:10:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$21849",
                      "typeString": "contract ERC20"
                    }
                  },
                  "id": 8478,
                  "nodeType": "ExpressionStatement",
                  "src": "5804:10:26"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8481,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 8479,
                      "name": "cDai",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8356,
                      "src": "5824:4:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_cERC20_$8327",
                        "typeString": "contract cERC20"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 8480,
                      "name": "_cDai",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8449,
                      "src": "5831:5:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_cERC20_$8327",
                        "typeString": "contract cERC20"
                      }
                    },
                    "src": "5824:12:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_cERC20_$8327",
                      "typeString": "contract cERC20"
                    }
                  },
                  "id": 8482,
                  "nodeType": "ExpressionStatement",
                  "src": "5824:12:26"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8485,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 8483,
                      "name": "fundManager",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8360,
                      "src": "5846:11:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 8484,
                      "name": "_fundManager",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8451,
                      "src": "5860:12:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "5846:26:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 8486,
                  "nodeType": "ExpressionStatement",
                  "src": "5846:26:26"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8491,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 8487,
                      "name": "marketMaker",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8358,
                      "src": "5882:11:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_GoodMarketMaker_$8274",
                        "typeString": "contract GoodMarketMaker"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 8489,
                          "name": "_marketMaker",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8457,
                          "src": "5912:12:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 8488,
                        "name": "GoodMarketMaker",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8274,
                        "src": "5896:15:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_GoodMarketMaker_$8274_$",
                          "typeString": "type(contract GoodMarketMaker)"
                        }
                      },
                      "id": 8490,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "5896:29:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_GoodMarketMaker_$8274",
                        "typeString": "contract GoodMarketMaker"
                      }
                    },
                    "src": "5882:43:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_GoodMarketMaker_$8274",
                      "typeString": "contract GoodMarketMaker"
                    }
                  },
                  "id": 8492,
                  "nodeType": "ExpressionStatement",
                  "src": "5882:43:26"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8495,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 8493,
                      "name": "blockInterval",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8362,
                      "src": "5935:13:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 8494,
                      "name": "_blockInterval",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8461,
                      "src": "5951:14:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "5935:30:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 8496,
                  "nodeType": "ExpressionStatement",
                  "src": "5935:30:26"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8503,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 8497,
                      "name": "lastMinted",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8364,
                      "src": "5975:10:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 8501,
                          "name": "blockInterval",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8362,
                          "src": "6005:13:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 8498,
                            "name": "block",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 22161,
                            "src": "5988:5:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_block",
                              "typeString": "block"
                            }
                          },
                          "id": 8499,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "number",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "5988:12:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 8500,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "div",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 21239,
                        "src": "5988:16:26",
                        "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": 8502,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "5988:31:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "5975:44:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 8504,
                  "nodeType": "ExpressionStatement",
                  "src": "5975:44:26"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8507,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 8505,
                      "name": "contribution",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8366,
                      "src": "6029:12:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ContributionCalc_$8343",
                        "typeString": "contract ContributionCalc"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 8506,
                      "name": "_contribution",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8459,
                      "src": "6044:13:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ContributionCalc_$8343",
                        "typeString": "contract ContributionCalc"
                      }
                    },
                    "src": "6029:28:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ContributionCalc_$8343",
                      "typeString": "contract ContributionCalc"
                    }
                  },
                  "id": 8508,
                  "nodeType": "ExpressionStatement",
                  "src": "6029:28:26"
                }
              ]
            },
            "documentation": "@dev Constructor\n@param _dai The address of DAI\n@param _cDai The address of cDAI\n@param _fundManager The address of the fund manager contract\n@param _avatar The avatar of the DAO\n@param _identity The identity contract\n@param _marketMaker The address of the market maker contract\n@param _contribution The address of the contribution contract\n@param _blockInterval How many blocks should be passed before the next execution of `mintInterestAndUBI`",
            "id": 8510,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 8464,
                    "name": "_identity",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8455,
                    "src": "5738:9:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Identity_$2380",
                      "typeString": "contract Identity"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 8465,
                    "name": "_avatar",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8453,
                    "src": "5749:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Avatar_$12705",
                      "typeString": "contract Avatar"
                    }
                  }
                ],
                "id": 8466,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8463,
                  "name": "FeelessScheme",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1227,
                  "src": "5724:13:26",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_FeelessScheme_$1227_$",
                    "typeString": "type(contract FeelessScheme)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "5724:33:26"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 8468,
                    "name": "now",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 22173,
                    "src": "5771:3:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 8471,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 8469,
                      "name": "now",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 22173,
                      "src": "5776:3:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "*",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "32",
                      "id": 8470,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "5782:1:26",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_2_by_1",
                        "typeString": "int_const 2"
                      },
                      "value": "2"
                    },
                    "src": "5776:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 8472,
                    "name": "_avatar",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8453,
                    "src": "5785:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Avatar_$12705",
                      "typeString": "contract Avatar"
                    }
                  }
                ],
                "id": 8473,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8467,
                  "name": "ActivePeriod",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1004,
                  "src": "5758:12:26",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_ActivePeriod_$1004_$",
                    "typeString": "type(contract ActivePeriod)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "5758:35:26"
              }
            ],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8462,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8447,
                  "name": "_dai",
                  "nodeType": "VariableDeclaration",
                  "scope": 8510,
                  "src": "5494:10:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ERC20_$21849",
                    "typeString": "contract ERC20"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8446,
                    "name": "ERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21849,
                    "src": "5494:5:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$21849",
                      "typeString": "contract ERC20"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8449,
                  "name": "_cDai",
                  "nodeType": "VariableDeclaration",
                  "scope": 8510,
                  "src": "5514:12:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_cERC20_$8327",
                    "typeString": "contract cERC20"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8448,
                    "name": "cERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 8327,
                    "src": "5514:6:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_cERC20_$8327",
                      "typeString": "contract cERC20"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8451,
                  "name": "_fundManager",
                  "nodeType": "VariableDeclaration",
                  "scope": 8510,
                  "src": "5536:20:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8450,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5536:7:26",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8453,
                  "name": "_avatar",
                  "nodeType": "VariableDeclaration",
                  "scope": 8510,
                  "src": "5566:14:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_Avatar_$12705",
                    "typeString": "contract Avatar"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8452,
                    "name": "Avatar",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 12705,
                    "src": "5566:6:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Avatar_$12705",
                      "typeString": "contract Avatar"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8455,
                  "name": "_identity",
                  "nodeType": "VariableDeclaration",
                  "scope": 8510,
                  "src": "5590:18:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_Identity_$2380",
                    "typeString": "contract Identity"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8454,
                    "name": "Identity",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 2380,
                    "src": "5590:8:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Identity_$2380",
                      "typeString": "contract Identity"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8457,
                  "name": "_marketMaker",
                  "nodeType": "VariableDeclaration",
                  "scope": 8510,
                  "src": "5618:20:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8456,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5618:7:26",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8459,
                  "name": "_contribution",
                  "nodeType": "VariableDeclaration",
                  "scope": 8510,
                  "src": "5648:30:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ContributionCalc_$8343",
                    "typeString": "contract ContributionCalc"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8458,
                    "name": "ContributionCalc",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 8343,
                    "src": "5648:16:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ContributionCalc_$8343",
                      "typeString": "contract ContributionCalc"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8461,
                  "name": "_blockInterval",
                  "nodeType": "VariableDeclaration",
                  "scope": 8510,
                  "src": "5688:22:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8460,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5688:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5484:232:26"
            },
            "returnParameters": {
              "id": 8474,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5794:0:26"
            },
            "scope": 9043,
            "src": "5473:591:26",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 8542,
              "nodeType": "Block",
              "src": "6255:302:26",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 8515,
                      "name": "addRights",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1203,
                      "src": "6265:9:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 8516,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6265:11:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8517,
                  "nodeType": "ExpressionStatement",
                  "src": "6265:11:26"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "expression": {
                                "argumentTypes": null,
                                "id": 8522,
                                "name": "avatar",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 861,
                                "src": "6387:6:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_Avatar_$12705",
                                  "typeString": "contract Avatar"
                                }
                              },
                              "id": 8523,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "nativeToken",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 12441,
                              "src": "6387:18:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_view$__$returns$_t_contract$_DAOToken_$14470_$",
                                "typeString": "function () view external returns (contract DAOToken)"
                              }
                            },
                            "id": 8524,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "6387:20:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_DAOToken_$14470",
                              "typeString": "contract DAOToken"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_DAOToken_$14470",
                              "typeString": "contract DAOToken"
                            }
                          ],
                          "id": 8521,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "6379:7:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 8525,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "6379:29:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "6164644d696e746572286164647265737329",
                            "id": 8528,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "6446:20:26",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_983b2d560bdd6b422e26073d9516b4646e2f1008810070c0d32b3a79aaa7bfcb",
                              "typeString": "literal_string \"addMinter(address)\""
                            },
                            "value": "addMinter(address)"
                          },
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 8530,
                                "name": "this",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 22311,
                                "src": "6476:4:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_GoodReserveCDai_$9043",
                                  "typeString": "contract GoodReserveCDai"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_GoodReserveCDai_$9043",
                                  "typeString": "contract GoodReserveCDai"
                                }
                              ],
                              "id": 8529,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "6468:7:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": "address"
                            },
                            "id": 8531,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "6468:13:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_stringliteral_983b2d560bdd6b422e26073d9516b4646e2f1008810070c0d32b3a79aaa7bfcb",
                              "typeString": "literal_string \"addMinter(address)\""
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 8526,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 22158,
                            "src": "6422:3:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 8527,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encodeWithSignature",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "6422:23:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencodewithsignature_pure$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function (string memory) pure returns (bytes memory)"
                          }
                        },
                        "id": 8532,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "6422:60:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8533,
                        "name": "avatar",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 861,
                        "src": "6496:6:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Avatar_$12705",
                          "typeString": "contract Avatar"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 8534,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "6516:1:26",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_contract$_Avatar_$12705",
                          "typeString": "contract Avatar"
                        },
                        {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 8518,
                        "name": "controller",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1286,
                        "src": "6343:10:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ControllerInterface_$14394",
                          "typeString": "contract ControllerInterface"
                        }
                      },
                      "id": 8520,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "genericCall",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 14271,
                      "src": "6343:22:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_contract$_Avatar_$12705_$_t_uint256_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                        "typeString": "function (address,bytes memory,contract Avatar,uint256) external returns (bool,bytes memory)"
                      }
                    },
                    "id": 8535,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6343:184:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                      "typeString": "tuple(bool,bytes memory)"
                    }
                  },
                  "id": 8536,
                  "nodeType": "ExpressionStatement",
                  "src": "6343:184:26"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 8537,
                        "name": "super",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 22312,
                        "src": "6537:5:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_super$_GoodReserveCDai_$9043",
                          "typeString": "contract super GoodReserveCDai"
                        }
                      },
                      "id": 8539,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "start",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 969,
                      "src": "6537:11:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 8540,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6537:13:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8541,
                  "nodeType": "ExpressionStatement",
                  "src": "6537:13:26"
                }
              ]
            },
            "documentation": "@dev Start function. Adds this contract to identity as a feeless scheme.\nCan only be called if scheme is registered",
            "id": 8543,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 8513,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8512,
                  "name": "onlyRegistered",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1335,
                  "src": "6240:14:26",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "6240:14:26"
              }
            ],
            "name": "start",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8511,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6230:2:26"
            },
            "returnParameters": {
              "id": 8514,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6255:0:26"
            },
            "scope": 9043,
            "src": "6216:341:26",
            "stateMutability": "nonpayable",
            "superFunction": 969,
            "visibility": "public"
          },
          {
            "body": {
              "id": 8556,
              "nodeType": "Block",
              "src": "6761:60:26",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8554,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 8550,
                      "name": "marketMaker",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8358,
                      "src": "6771:11:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_GoodMarketMaker_$8274",
                        "typeString": "contract GoodMarketMaker"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 8552,
                          "name": "_marketMaker",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8545,
                          "src": "6801:12:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 8551,
                        "name": "GoodMarketMaker",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8274,
                        "src": "6785:15:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_GoodMarketMaker_$8274_$",
                          "typeString": "type(contract GoodMarketMaker)"
                        }
                      },
                      "id": 8553,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "6785:29:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_GoodMarketMaker_$8274",
                        "typeString": "contract GoodMarketMaker"
                      }
                    },
                    "src": "6771:43:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_GoodMarketMaker_$8274",
                      "typeString": "contract GoodMarketMaker"
                    }
                  },
                  "id": 8555,
                  "nodeType": "ExpressionStatement",
                  "src": "6771:43:26"
                }
              ]
            },
            "documentation": "@dev Allows the DAO to change the market maker contract\n@param _marketMaker address of the new contract",
            "id": 8557,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 8548,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8547,
                  "name": "onlyAvatar",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1325,
                  "src": "6750:10:26",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "6750:10:26"
              }
            ],
            "name": "setMarketMaker",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8546,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8545,
                  "name": "_marketMaker",
                  "nodeType": "VariableDeclaration",
                  "scope": 8557,
                  "src": "6721:20:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8544,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6721:7:26",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6720:22:26"
            },
            "returnParameters": {
              "id": 8549,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6761:0:26"
            },
            "scope": 9043,
            "src": "6697:124:26",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 8568,
              "nodeType": "Block",
              "src": "7025:43:26",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8566,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 8564,
                      "name": "fundManager",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8360,
                      "src": "7035:11:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 8565,
                      "name": "_fundManager",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8559,
                      "src": "7049:12:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "7035:26:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 8567,
                  "nodeType": "ExpressionStatement",
                  "src": "7035:26:26"
                }
              ]
            },
            "documentation": "@dev Allows the DAO to change the fund manager contract\n@param _fundManager address of the new contract",
            "id": 8569,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 8562,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8561,
                  "name": "onlyAvatar",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1325,
                  "src": "7014:10:26",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "7014:10:26"
              }
            ],
            "name": "setFundManager",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8560,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8559,
                  "name": "_fundManager",
                  "nodeType": "VariableDeclaration",
                  "scope": 8569,
                  "src": "6985:20:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8558,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6985:7:26",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6984:22:26"
            },
            "returnParameters": {
              "id": 8563,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7025:0:26"
            },
            "scope": 9043,
            "src": "6961:107:26",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 8580,
              "nodeType": "Block",
              "src": "7257:47:26",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8578,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 8576,
                      "name": "blockInterval",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8362,
                      "src": "7267:13:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 8577,
                      "name": "_blockInterval",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8571,
                      "src": "7283:14:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "7267:30:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 8579,
                  "nodeType": "ExpressionStatement",
                  "src": "7267:30:26"
                }
              ]
            },
            "documentation": "@dev Allows the DAO to change the block interval\n@param _blockInterval the new value",
            "id": 8581,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 8574,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8573,
                  "name": "onlyAvatar",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1325,
                  "src": "7246:10:26",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "7246:10:26"
              }
            ],
            "name": "setBlockInterval",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8572,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8571,
                  "name": "_blockInterval",
                  "nodeType": "VariableDeclaration",
                  "scope": 8581,
                  "src": "7215:22:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8570,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7215:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7214:24:26"
            },
            "returnParameters": {
              "id": 8575,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7257:0:26"
            },
            "scope": 9043,
            "src": "7189:115:26",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 8607,
              "nodeType": "Block",
              "src": "7539:197:26",
              "statements": [
                {
                  "assignments": [
                    8589
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8589,
                      "name": "prevAddress",
                      "nodeType": "VariableDeclaration",
                      "scope": 8607,
                      "src": "7549:19:26",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 8588,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "7549:7:26",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8593,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8591,
                        "name": "contribution",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8366,
                        "src": "7579:12:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ContributionCalc_$8343",
                          "typeString": "contract ContributionCalc"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_ContributionCalc_$8343",
                          "typeString": "contract ContributionCalc"
                        }
                      ],
                      "id": 8590,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "7571:7:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": "address"
                    },
                    "id": 8592,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7571:21:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7549:43:26"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8598,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 8594,
                      "name": "contribution",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8366,
                      "src": "7602:12:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ContributionCalc_$8343",
                        "typeString": "contract ContributionCalc"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 8596,
                          "name": "_contribution",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8583,
                          "src": "7634:13:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 8595,
                        "name": "ContributionCalc",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8343,
                        "src": "7617:16:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_ContributionCalc_$8343_$",
                          "typeString": "type(contract ContributionCalc)"
                        }
                      },
                      "id": 8597,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "7617:31:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ContributionCalc_$8343",
                        "typeString": "contract ContributionCalc"
                      }
                    },
                    "src": "7602:46:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ContributionCalc_$8343",
                      "typeString": "contract ContributionCalc"
                    }
                  },
                  "id": 8599,
                  "nodeType": "ExpressionStatement",
                  "src": "7602:46:26"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8601,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 22171,
                          "src": "7690:3:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 8602,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "7690:10:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8603,
                        "name": "prevAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8589,
                        "src": "7702:11:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8604,
                        "name": "_contribution",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8583,
                        "src": "7715:13:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 8600,
                      "name": "ContributionAddressUpdated",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8429,
                      "src": "7663:26:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$returns$__$",
                        "typeString": "function (address,address,address)"
                      }
                    },
                    "id": 8605,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7663:66:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8606,
                  "nodeType": "EmitStatement",
                  "src": "7658:71:26"
                }
              ]
            },
            "documentation": "@dev Allows the DAO to change the contribution formula contract\n@param _contribution address of the new contribution contract",
            "id": 8608,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 8586,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8585,
                  "name": "onlyAvatar",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1325,
                  "src": "7528:10:26",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "7528:10:26"
              }
            ],
            "name": "setContributionAddress",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8584,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8583,
                  "name": "_contribution",
                  "nodeType": "VariableDeclaration",
                  "scope": 8608,
                  "src": "7498:21:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8582,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7498:7:26",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7497:23:26"
            },
            "returnParameters": {
              "id": 8587,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7539:0:26"
            },
            "scope": 9043,
            "src": "7466:270:26",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 8694,
              "nodeType": "Block",
              "src": "8573:770:26",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 8634,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 8627,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 22171,
                                "src": "8623:3:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 8628,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "8623:10:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 8630,
                                  "name": "this",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 22311,
                                  "src": "8643:4:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_GoodReserveCDai_$9043",
                                    "typeString": "contract GoodReserveCDai"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_GoodReserveCDai_$9043",
                                    "typeString": "contract GoodReserveCDai"
                                  }
                                ],
                                "id": 8629,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "8635:7:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": "address"
                              },
                              "id": 8631,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "8635:13:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 8625,
                              "name": "_buyWith",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8610,
                              "src": "8604:8:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ERC20_$21849",
                                "typeString": "contract ERC20"
                              }
                            },
                            "id": 8626,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "allowance",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 21474,
                            "src": "8604:18:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$",
                              "typeString": "function (address,address) view external returns (uint256)"
                            }
                          },
                          "id": 8632,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8604:45:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 8633,
                          "name": "_tokenAmount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8612,
                          "src": "8653:12:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "8604:61:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "596f75206e65656420746f20617070726f76652063444149207472616e73666572206669727374",
                        "id": 8635,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "8679:41:26",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_f32a1e6e77966d694bc1ee2f99df81e54285fd4874d9ecb510ee4cf4b43d729e",
                          "typeString": "literal_string \"You need to approve cDAI transfer first\""
                        },
                        "value": "You need to approve cDAI transfer first"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_f32a1e6e77966d694bc1ee2f99df81e54285fd4874d9ecb510ee4cf4b43d729e",
                          "typeString": "literal_string \"You need to approve cDAI transfer first\""
                        }
                      ],
                      "id": 8624,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        22174,
                        22175
                      ],
                      "referencedDeclaration": 22175,
                      "src": "8583:7:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 8636,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8583:147:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8637,
                  "nodeType": "ExpressionStatement",
                  "src": "8583:147:26"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 8649,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 8641,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 22171,
                                "src": "8783:3:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 8642,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "8783:10:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 8644,
                                  "name": "this",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 22311,
                                  "src": "8803:4:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_GoodReserveCDai_$9043",
                                    "typeString": "contract GoodReserveCDai"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_GoodReserveCDai_$9043",
                                    "typeString": "contract GoodReserveCDai"
                                  }
                                ],
                                "id": 8643,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "8795:7:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": "address"
                              },
                              "id": 8645,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "8795:13:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 8646,
                              "name": "_tokenAmount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8612,
                              "src": "8810:12:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 8639,
                              "name": "_buyWith",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8610,
                              "src": "8761:8:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ERC20_$21849",
                                "typeString": "contract ERC20"
                              }
                            },
                            "id": 8640,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "transferFrom",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 21578,
                            "src": "8761:21:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$",
                              "typeString": "function (address,address,uint256) external returns (bool)"
                            }
                          },
                          "id": 8647,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8761:62:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "74727565",
                          "id": 8648,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "8827:4:26",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        },
                        "src": "8761:70:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "7472616e7366657246726f6d206661696c65642c206d616b65207375726520796f7520617070726f7665642063444149207472616e73666572",
                        "id": 8650,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "8845:59:26",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_5f9bc1ecee198826c3960d7d45b75066d789f3149e8f67e92b4f00c4b033fb91",
                          "typeString": "literal_string \"transferFrom failed, make sure you approved cDAI transfer\""
                        },
                        "value": "transferFrom failed, make sure you approved cDAI transfer"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_5f9bc1ecee198826c3960d7d45b75066d789f3149e8f67e92b4f00c4b033fb91",
                          "typeString": "literal_string \"transferFrom failed, make sure you approved cDAI transfer\""
                        }
                      ],
                      "id": 8638,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        22174,
                        22175
                      ],
                      "referencedDeclaration": 22175,
                      "src": "8740:7:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 8651,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8740:174:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8652,
                  "nodeType": "ExpressionStatement",
                  "src": "8740:174:26"
                },
                {
                  "assignments": [
                    8654
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8654,
                      "name": "gdReturn",
                      "nodeType": "VariableDeclaration",
                      "scope": 8694,
                      "src": "8924:16:26",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8653,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "8924:7:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8660,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8657,
                        "name": "_buyWith",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8610,
                        "src": "8959:8:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20_$21849",
                          "typeString": "contract ERC20"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8658,
                        "name": "_tokenAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8612,
                        "src": "8969:12:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_ERC20_$21849",
                          "typeString": "contract ERC20"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 8655,
                        "name": "marketMaker",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8358,
                        "src": "8943:11:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_GoodMarketMaker_$8274",
                          "typeString": "contract GoodMarketMaker"
                        }
                      },
                      "id": 8656,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "buy",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7772,
                      "src": "8943:15:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_contract$_ERC20_$21849_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (contract ERC20,uint256) external returns (uint256)"
                      }
                    },
                    "id": 8659,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8943:39:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "8924:58:26"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 8664,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 8662,
                          "name": "gdReturn",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8654,
                          "src": "9000:8:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 8663,
                          "name": "_minReturn",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8614,
                          "src": "9012:10:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "9000:22:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "47442072657475726e206d7573742062652061626f766520746865206d696e52657475726e",
                        "id": 8665,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "9024:39:26",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_51ea6074161d8e21af50a50b8c4950b1227f8b4bc05f739667a3973904e7b934",
                          "typeString": "literal_string \"GD return must be above the minReturn\""
                        },
                        "value": "GD return must be above the minReturn"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_51ea6074161d8e21af50a50b8c4950b1227f8b4bc05f739667a3973904e7b934",
                          "typeString": "literal_string \"GD return must be above the minReturn\""
                        }
                      ],
                      "id": 8661,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        22174,
                        22175
                      ],
                      "referencedDeclaration": 22175,
                      "src": "8992:7:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 8666,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8992:72:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8667,
                  "nodeType": "ExpressionStatement",
                  "src": "8992:72:26"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8676,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 22171,
                          "src": "9124:3:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 8677,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "9124:10:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8678,
                        "name": "gdReturn",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8654,
                        "src": "9136:8:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 8670,
                                    "name": "avatar",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 861,
                                    "src": "9096:6:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_Avatar_$12705",
                                      "typeString": "contract Avatar"
                                    }
                                  },
                                  "id": 8671,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "nativeToken",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 12441,
                                  "src": "9096:18:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_view$__$returns$_t_contract$_DAOToken_$14470_$",
                                    "typeString": "function () view external returns (contract DAOToken)"
                                  }
                                },
                                "id": 8672,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "9096:20:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_DAOToken_$14470",
                                  "typeString": "contract DAOToken"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_DAOToken_$14470",
                                  "typeString": "contract DAOToken"
                                }
                              ],
                              "id": 8669,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "9088:7:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": "address"
                            },
                            "id": 8673,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "9088:29:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 8668,
                          "name": "ERC20Mintable",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 21966,
                          "src": "9074:13:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_ERC20Mintable_$21966_$",
                            "typeString": "type(contract ERC20Mintable)"
                          }
                        },
                        "id": 8674,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "9074:44:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20Mintable_$21966",
                          "typeString": "contract ERC20Mintable"
                        }
                      },
                      "id": 8675,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mint",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 21965,
                      "src": "9074:49:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                        "typeString": "function (address,uint256) external returns (bool)"
                      }
                    },
                    "id": 8679,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9074:71:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 8680,
                  "nodeType": "ExpressionStatement",
                  "src": "9074:71:26"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8682,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 22171,
                          "src": "9188:3:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 8683,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "9188:10:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 8685,
                            "name": "_buyWith",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8610,
                            "src": "9220:8:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ERC20_$21849",
                              "typeString": "contract ERC20"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_ERC20_$21849",
                              "typeString": "contract ERC20"
                            }
                          ],
                          "id": 8684,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "9212:7:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 8686,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "9212:17:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8687,
                        "name": "_tokenAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8612,
                        "src": "9243:12:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8688,
                        "name": "_minReturn",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8614,
                        "src": "9269:10:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8689,
                        "name": "gdReturn",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8654,
                        "src": "9293:8:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 8681,
                      "name": "TokenPurchased",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8407,
                      "src": "9160:14:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256,uint256,uint256)"
                      }
                    },
                    "id": 8690,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9160:151:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8691,
                  "nodeType": "EmitStatement",
                  "src": "9155:156:26"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8692,
                    "name": "gdReturn",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8654,
                    "src": "9328:8:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 8623,
                  "id": 8693,
                  "nodeType": "Return",
                  "src": "9321:15:26"
                }
              ]
            },
            "documentation": "@dev Converts `buyWith` tokens to GD tokens and updates the bonding curve params.\n`buy` occurs only if the GD return is above the given minimum. It is possible\nto buy only with cDAI and when the contract is set to active. MUST call to\n`buyWith` `approve` prior this action to allow this contract to accomplish the\nconversion.\n@param _buyWith The tokens that should be converted to GD tokens\n@param _tokenAmount The amount of `buyWith` tokens that should be converted to GD tokens\n@param _minReturn The minimum allowed return in GD tokens\n@return (gdReturn) How much GD tokens were transferred",
            "id": 8695,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 8617,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8616,
                  "name": "requireActive",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 882,
                  "src": "8522:13:26",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "8522:13:26"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 8619,
                    "name": "_buyWith",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8610,
                    "src": "8545:8:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$21849",
                      "typeString": "contract ERC20"
                    }
                  }
                ],
                "id": 8620,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8618,
                  "name": "onlyCDai",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 8395,
                  "src": "8536:8:26",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_contract$_ERC20_$21849_$",
                    "typeString": "modifier (contract ERC20)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "8536:18:26"
              }
            ],
            "name": "buy",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8615,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8610,
                  "name": "_buyWith",
                  "nodeType": "VariableDeclaration",
                  "scope": 8695,
                  "src": "8436:14:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ERC20_$21849",
                    "typeString": "contract ERC20"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8609,
                    "name": "ERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21849,
                    "src": "8436:5:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$21849",
                      "typeString": "contract ERC20"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8612,
                  "name": "_tokenAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 8695,
                  "src": "8460:20:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8611,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8460:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8614,
                  "name": "_minReturn",
                  "nodeType": "VariableDeclaration",
                  "scope": 8695,
                  "src": "8490:18:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8613,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8490:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8426:88:26"
            },
            "returnParameters": {
              "id": 8623,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8622,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8695,
                  "src": "8564:7:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8621,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8564:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8563:9:26"
            },
            "scope": 9043,
            "src": "8414:929:26",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 8778,
              "nodeType": "Block",
              "src": "10293:832:26",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8719,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 22171,
                          "src": "10357:3:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 8720,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "10357:10:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8721,
                        "name": "_gdAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8699,
                        "src": "10369:9:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 8713,
                                    "name": "avatar",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 861,
                                    "src": "10325:6:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_Avatar_$12705",
                                      "typeString": "contract Avatar"
                                    }
                                  },
                                  "id": 8714,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "nativeToken",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 12441,
                                  "src": "10325:18:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_view$__$returns$_t_contract$_DAOToken_$14470_$",
                                    "typeString": "function () view external returns (contract DAOToken)"
                                  }
                                },
                                "id": 8715,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "10325:20:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_DAOToken_$14470",
                                  "typeString": "contract DAOToken"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_DAOToken_$14470",
                                  "typeString": "contract DAOToken"
                                }
                              ],
                              "id": 8712,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "10317:7:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": "address"
                            },
                            "id": 8716,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "10317:29:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 8711,
                          "name": "ERC20Burnable",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 21880,
                          "src": "10303:13:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_ERC20Burnable_$21880_$",
                            "typeString": "type(contract ERC20Burnable)"
                          }
                        },
                        "id": 8717,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "10303:44:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20Burnable_$21880",
                          "typeString": "contract ERC20Burnable"
                        }
                      },
                      "id": 8718,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "burnFrom",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 21879,
                      "src": "10303:53:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256) external"
                      }
                    },
                    "id": 8722,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10303:76:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8723,
                  "nodeType": "ExpressionStatement",
                  "src": "10303:76:26"
                },
                {
                  "assignments": [
                    8725
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8725,
                      "name": "contributionAmount",
                      "nodeType": "VariableDeclaration",
                      "scope": 8778,
                      "src": "10389:26:26",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8724,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "10389:7:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8735,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8728,
                        "name": "marketMaker",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8358,
                        "src": "10466:11:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_GoodMarketMaker_$8274",
                          "typeString": "contract GoodMarketMaker"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8729,
                        "name": "this",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 22311,
                        "src": "10491:4:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_GoodReserveCDai_$9043",
                          "typeString": "contract GoodReserveCDai"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8730,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 22171,
                          "src": "10509:3:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 8731,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "10509:10:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8732,
                        "name": "_sellTo",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8697,
                        "src": "10533:7:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20_$21849",
                          "typeString": "contract ERC20"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8733,
                        "name": "_gdAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8699,
                        "src": "10554:9:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_GoodMarketMaker_$8274",
                          "typeString": "contract GoodMarketMaker"
                        },
                        {
                          "typeIdentifier": "t_contract$_GoodReserveCDai_$9043",
                          "typeString": "contract GoodReserveCDai"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_contract$_ERC20_$21849",
                          "typeString": "contract ERC20"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 8726,
                        "name": "contribution",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8366,
                        "src": "10418:12:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ContributionCalc_$8343",
                          "typeString": "contract ContributionCalc"
                        }
                      },
                      "id": 8727,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "calculateContribution",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 8342,
                      "src": "10418:34:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_contract$_GoodMarketMaker_$8274_$_t_contract$_GoodReserveCDai_$9043_$_t_address_$_t_contract$_ERC20_$21849_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (contract GoodMarketMaker,contract GoodReserveCDai,address,contract ERC20,uint256) view external returns (uint256)"
                      }
                    },
                    "id": 8734,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10418:155:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "10389:184:26"
                },
                {
                  "assignments": [
                    8737
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8737,
                      "name": "tokenReturn",
                      "nodeType": "VariableDeclaration",
                      "scope": 8778,
                      "src": "10583:19:26",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8736,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "10583:7:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8744,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8740,
                        "name": "_sellTo",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8697,
                        "src": "10651:7:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20_$21849",
                          "typeString": "contract ERC20"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8741,
                        "name": "_gdAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8699,
                        "src": "10672:9:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8742,
                        "name": "contributionAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8725,
                        "src": "10695:18:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_ERC20_$21849",
                          "typeString": "contract ERC20"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 8738,
                        "name": "marketMaker",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8358,
                        "src": "10605:11:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_GoodMarketMaker_$8274",
                          "typeString": "contract GoodMarketMaker"
                        }
                      },
                      "id": 8739,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sellWithContribution",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7936,
                      "src": "10605:32:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_contract$_ERC20_$21849_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (contract ERC20,uint256,uint256) external returns (uint256)"
                      }
                    },
                    "id": 8743,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10605:118:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "10583:140:26"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 8748,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 8746,
                          "name": "tokenReturn",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8737,
                          "src": "10741:11:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 8747,
                          "name": "_minReturn",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8701,
                          "src": "10756:10:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "10741:25:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "546f6b656e2072657475726e206d7573742062652061626f766520746865206d696e52657475726e",
                        "id": 8749,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "10768:42:26",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_9c6d7b666310065639eb0b875a52ad6dddfa6ae7e04927e0ed9bf030b6c97eb5",
                          "typeString": "literal_string \"Token return must be above the minReturn\""
                        },
                        "value": "Token return must be above the minReturn"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_9c6d7b666310065639eb0b875a52ad6dddfa6ae7e04927e0ed9bf030b6c97eb5",
                          "typeString": "literal_string \"Token return must be above the minReturn\""
                        }
                      ],
                      "id": 8745,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        22174,
                        22175
                      ],
                      "referencedDeclaration": 22175,
                      "src": "10733:7:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 8750,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10733:78:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8751,
                  "nodeType": "ExpressionStatement",
                  "src": "10733:78:26"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 8760,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 8755,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 22171,
                                "src": "10846:3:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 8756,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "10846:10:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 8757,
                              "name": "tokenReturn",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8737,
                              "src": "10858:11:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 8753,
                              "name": "_sellTo",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8697,
                              "src": "10829:7:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ERC20_$21849",
                                "typeString": "contract ERC20"
                              }
                            },
                            "id": 8754,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "transfer",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 21493,
                            "src": "10829:16:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                              "typeString": "function (address,uint256) external returns (bool)"
                            }
                          },
                          "id": 8758,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "10829:41:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "74727565",
                          "id": 8759,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "10874:4:26",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        },
                        "src": "10829:49:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "5472616e73666572206661696c6564",
                        "id": 8761,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "10880:17:26",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_25adaa6d082ce15f901e0d8a3d393e7462ef9edf2e6bc8321fa14d1615b6fc51",
                          "typeString": "literal_string \"Transfer failed\""
                        },
                        "value": "Transfer failed"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_25adaa6d082ce15f901e0d8a3d393e7462ef9edf2e6bc8321fa14d1615b6fc51",
                          "typeString": "literal_string \"Transfer failed\""
                        }
                      ],
                      "id": 8752,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        22174,
                        22175
                      ],
                      "referencedDeclaration": 22175,
                      "src": "10821:7:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 8762,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10821:77:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8763,
                  "nodeType": "ExpressionStatement",
                  "src": "10821:77:26"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8765,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 22171,
                          "src": "10936:3:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 8766,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "10936:10:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 8768,
                            "name": "_sellTo",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8697,
                            "src": "10968:7:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ERC20_$21849",
                              "typeString": "contract ERC20"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_ERC20_$21849",
                              "typeString": "contract ERC20"
                            }
                          ],
                          "id": 8767,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "10960:7:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 8769,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "10960:16:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8770,
                        "name": "_gdAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8699,
                        "src": "10990:9:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8771,
                        "name": "contributionAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8725,
                        "src": "11013:18:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8772,
                        "name": "_minReturn",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8701,
                        "src": "11045:10:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8773,
                        "name": "tokenReturn",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8737,
                        "src": "11069:11:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 8764,
                      "name": "TokenSold",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8421,
                      "src": "10913:9:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256,uint256,uint256,uint256)"
                      }
                    },
                    "id": 8774,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10913:177:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8775,
                  "nodeType": "EmitStatement",
                  "src": "10908:182:26"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8776,
                    "name": "tokenReturn",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8737,
                    "src": "11107:11:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 8710,
                  "id": 8777,
                  "nodeType": "Return",
                  "src": "11100:18:26"
                }
              ]
            },
            "documentation": "@dev Converts GD tokens to `sellTo` tokens and update the bonding curve params.\n`sell` occurs only if the token return is above the given minimum. Notice that\nthere is a contribution amount from the given GD that remains in the reserve.\nIt is only possible to sell to cDAI and only when the contract is set to\nactive. MUST be called to G$ `approve` prior to this action to allow this\ncontract to accomplish the conversion.\n@param _sellTo The tokens that will be received after the conversion\n@param _gdAmount The amount of GD tokens that should be converted to `_sellTo` tokens\n@param _minReturn The minimum allowed `sellTo` tokens return\n@return (tokenReturn) How much `sellTo` tokens were transferred",
            "id": 8779,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 8704,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8703,
                  "name": "requireActive",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 882,
                  "src": "10243:13:26",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "10243:13:26"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 8706,
                    "name": "_sellTo",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8697,
                    "src": "10266:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$21849",
                      "typeString": "contract ERC20"
                    }
                  }
                ],
                "id": 8707,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8705,
                  "name": "onlyCDai",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 8395,
                  "src": "10257:8:26",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_contract$_ERC20_$21849_$",
                    "typeString": "modifier (contract ERC20)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "10257:17:26"
              }
            ],
            "name": "sell",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8702,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8697,
                  "name": "_sellTo",
                  "nodeType": "VariableDeclaration",
                  "scope": 8779,
                  "src": "10161:13:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ERC20_$21849",
                    "typeString": "contract ERC20"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8696,
                    "name": "ERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21849,
                    "src": "10161:5:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$21849",
                      "typeString": "contract ERC20"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8699,
                  "name": "_gdAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 8779,
                  "src": "10184:17:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8698,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "10184:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8701,
                  "name": "_minReturn",
                  "nodeType": "VariableDeclaration",
                  "scope": 8779,
                  "src": "10211:18:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8700,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "10211:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10151:84:26"
            },
            "returnParameters": {
              "id": 8710,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8709,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8779,
                  "src": "10284:7:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8708,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "10284:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10283:9:26"
            },
            "scope": 9043,
            "src": "10138:987:26",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 8791,
              "nodeType": "Block",
              "src": "11373:56:26",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8788,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8781,
                        "src": "11415:6:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20_$21849",
                          "typeString": "contract ERC20"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_ERC20_$21849",
                          "typeString": "contract ERC20"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 8786,
                        "name": "marketMaker",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8358,
                        "src": "11390:11:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_GoodMarketMaker_$8274",
                          "typeString": "contract GoodMarketMaker"
                        }
                      },
                      "id": 8787,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "currentPrice",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7982,
                      "src": "11390:24:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_contract$_ERC20_$21849_$returns$_t_uint256_$",
                        "typeString": "function (contract ERC20) view external returns (uint256)"
                      }
                    },
                    "id": 8789,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11390:32:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 8785,
                  "id": 8790,
                  "nodeType": "Return",
                  "src": "11383:39:26"
                }
              ]
            },
            "documentation": "@dev Current price of GD in `token`. currently only cDAI is supported.\n@param _token The desired reserve token to have\n@return price of GD",
            "id": 8792,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "currentPrice",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8782,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8781,
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 8792,
                  "src": "11329:12:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ERC20_$21849",
                    "typeString": "contract ERC20"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8780,
                    "name": "ERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21849,
                    "src": "11329:5:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$21849",
                      "typeString": "contract ERC20"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11328:14:26"
            },
            "returnParameters": {
              "id": 8785,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8784,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8792,
                  "src": "11364:7:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8783,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "11364:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11363:9:26"
            },
            "scope": 9043,
            "src": "11307:122:26",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 8805,
              "nodeType": "Block",
              "src": "11707:68:26",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 8803,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 8800,
                          "name": "blockInterval",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8362,
                          "src": "11741:13:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 8797,
                            "name": "block",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 22161,
                            "src": "11724:5:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_block",
                              "typeString": "block"
                            }
                          },
                          "id": 8798,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "number",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "11724:12:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 8799,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "div",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 21239,
                        "src": "11724:16:26",
                        "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": 8801,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "11724:31:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 8802,
                      "name": "lastMinted",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8364,
                      "src": "11758:10:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "11724:44:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 8796,
                  "id": 8804,
                  "nodeType": "Return",
                  "src": "11717:51:26"
                }
              ]
            },
            "documentation": "@dev Checks if enough blocks have passed so it would be possible to\nexecute `mintInterestAndUBI` according to the length of `blockInterval`\n@return (bool) True if enough blocks have passed",
            "id": 8806,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "canMint",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8793,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "11677:2:26"
            },
            "returnParameters": {
              "id": 8796,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8795,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8806,
                  "src": "11701:4:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 8794,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "11701:4:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11700:6:26"
            },
            "scope": 9043,
            "src": "11661:114:26",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 8945,
              "nodeType": "Block",
              "src": "12611:1074:26",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 8827,
                          "name": "canMint",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8806,
                          "src": "12629:7:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_bool_$",
                            "typeString": "function () view returns (bool)"
                          }
                        },
                        "id": 8828,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "12629:9:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4e65656420746f207761697420666f7220746865206e65787420696e74657276616c",
                        "id": 8829,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "12640:36:26",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_b2926b938aae9e3d3391834a8a3f967955ec6bac9d9b401e186c29404478d446",
                          "typeString": "literal_string \"Need to wait for the next interval\""
                        },
                        "value": "Need to wait for the next interval"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_b2926b938aae9e3d3391834a8a3f967955ec6bac9d9b401e186c29404478d446",
                          "typeString": "literal_string \"Need to wait for the next interval\""
                        }
                      ],
                      "id": 8826,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        22174,
                        22175
                      ],
                      "referencedDeclaration": 22175,
                      "src": "12621:7:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 8830,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12621:56:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8831,
                  "nodeType": "ExpressionStatement",
                  "src": "12621:56:26"
                },
                {
                  "assignments": [
                    8833
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8833,
                      "name": "price",
                      "nodeType": "VariableDeclaration",
                      "scope": 8945,
                      "src": "12687:13:26",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8832,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "12687:7:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8837,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8835,
                        "name": "_interestToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8808,
                        "src": "12716:14:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20_$21849",
                          "typeString": "contract ERC20"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_ERC20_$21849",
                          "typeString": "contract ERC20"
                        }
                      ],
                      "id": 8834,
                      "name": "currentPrice",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8792,
                      "src": "12703:12:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_contract$_ERC20_$21849_$returns$_t_uint256_$",
                        "typeString": "function (contract ERC20) view returns (uint256)"
                      }
                    },
                    "id": 8836,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12703:28:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "12687:44:26"
                },
                {
                  "assignments": [
                    8839
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8839,
                      "name": "gdInterestToMint",
                      "nodeType": "VariableDeclaration",
                      "scope": 8945,
                      "src": "12741:24:26",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8838,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "12741:7:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8845,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8842,
                        "name": "_interestToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8808,
                        "src": "12793:14:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20_$21849",
                          "typeString": "contract ERC20"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8843,
                        "name": "_transfered",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8810,
                        "src": "12809:11:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_ERC20_$21849",
                          "typeString": "contract ERC20"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 8840,
                        "name": "marketMaker",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8358,
                        "src": "12768:11:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_GoodMarketMaker_$8274",
                          "typeString": "contract GoodMarketMaker"
                        }
                      },
                      "id": 8841,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mintInterest",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 8105,
                      "src": "12768:24:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_contract$_ERC20_$21849_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (contract ERC20,uint256) external returns (uint256)"
                      }
                    },
                    "id": 8844,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12768:53:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "12741:80:26"
                },
                {
                  "assignments": [
                    8847
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8847,
                      "name": "gooddollar",
                      "nodeType": "VariableDeclaration",
                      "scope": 8945,
                      "src": "12831:21:26",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_GoodDollar_$3767",
                        "typeString": "contract GoodDollar"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 8846,
                        "name": "GoodDollar",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 3767,
                        "src": "12831:10:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_GoodDollar_$3767",
                          "typeString": "contract GoodDollar"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8855,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "expression": {
                                "argumentTypes": null,
                                "id": 8850,
                                "name": "avatar",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 861,
                                "src": "12874:6:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_Avatar_$12705",
                                  "typeString": "contract Avatar"
                                }
                              },
                              "id": 8851,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "nativeToken",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 12441,
                              "src": "12874:18:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_view$__$returns$_t_contract$_DAOToken_$14470_$",
                                "typeString": "function () view external returns (contract DAOToken)"
                              }
                            },
                            "id": 8852,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "12874:20:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_DAOToken_$14470",
                              "typeString": "contract DAOToken"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_DAOToken_$14470",
                              "typeString": "contract DAOToken"
                            }
                          ],
                          "id": 8849,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "12866:7:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 8853,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "12866:29:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 8848,
                      "name": "GoodDollar",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3767,
                      "src": "12855:10:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_GoodDollar_$3767_$",
                        "typeString": "type(contract GoodDollar)"
                      }
                    },
                    "id": 8854,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12855:41:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_GoodDollar_$3767",
                      "typeString": "contract GoodDollar"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "12831:65:26"
                },
                {
                  "assignments": [
                    8857
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8857,
                      "name": "precisionLoss",
                      "nodeType": "VariableDeclaration",
                      "scope": 8945,
                      "src": "12906:21:26",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8856,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "12906:7:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8868,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "expression": {
                                "argumentTypes": null,
                                "id": 8863,
                                "name": "gooddollar",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8847,
                                "src": "12954:10:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_GoodDollar_$3767",
                                  "typeString": "contract GoodDollar"
                                }
                              },
                              "id": 8864,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "decimals",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 3397,
                              "src": "12954:19:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$",
                                "typeString": "function () view external returns (uint256)"
                              }
                            },
                            "id": 8865,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "12954:21:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 8862,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "12946:7:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint256_$",
                            "typeString": "type(uint256)"
                          },
                          "typeName": "uint256"
                        },
                        "id": 8866,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "12946:30:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "3237",
                            "id": 8859,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "12938:2:26",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_27_by_1",
                              "typeString": "int_const 27"
                            },
                            "value": "27"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_27_by_1",
                              "typeString": "int_const 27"
                            }
                          ],
                          "id": 8858,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "12930:7:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint256_$",
                            "typeString": "type(uint256)"
                          },
                          "typeName": "uint256"
                        },
                        "id": 8860,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "12930:11:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 8861,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sub",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 21263,
                      "src": "12930:15:26",
                      "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": 8867,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12930:47:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "12906:71:26"
                },
                {
                  "assignments": [
                    8870
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8870,
                      "name": "gdInterest",
                      "nodeType": "VariableDeclaration",
                      "scope": 8945,
                      "src": "12987:18:26",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8869,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "12987:7:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8880,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 8878,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "hexValue": "3130",
                          "id": 8876,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "13035:2:26",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_10_by_1",
                            "typeString": "int_const 10"
                          },
                          "value": "10"
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "**",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 8877,
                          "name": "precisionLoss",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8857,
                          "src": "13039:13:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "13035:17:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 8872,
                            "name": "_interest",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8812,
                            "src": "13013:9:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 8873,
                            "name": "price",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8833,
                            "src": "13024:5:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 8871,
                          "name": "rdiv",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 247,
                          "src": "13008:4:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                            "typeString": "function (uint256,uint256) pure returns (uint256)"
                          }
                        },
                        "id": 8874,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "13008:22:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 8875,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "div",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 21239,
                      "src": "13008:26:26",
                      "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": 8879,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13008:45:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "12987:66:26"
                },
                {
                  "assignments": [
                    8882
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8882,
                      "name": "gdExpansionToMint",
                      "nodeType": "VariableDeclaration",
                      "scope": 8945,
                      "src": "13063:25:26",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8881,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "13063:7:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8887,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8885,
                        "name": "_interestToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8808,
                        "src": "13117:14:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20_$21849",
                          "typeString": "contract ERC20"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_ERC20_$21849",
                          "typeString": "contract ERC20"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 8883,
                        "name": "marketMaker",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8358,
                        "src": "13091:11:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_GoodMarketMaker_$8274",
                          "typeString": "contract GoodMarketMaker"
                        }
                      },
                      "id": 8884,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mintExpansion",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 8273,
                      "src": "13091:25:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_contract$_ERC20_$21849_$returns$_t_uint256_$",
                        "typeString": "function (contract ERC20) external returns (uint256)"
                      }
                    },
                    "id": 8886,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13091:41:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "13063:69:26"
                },
                {
                  "assignments": [
                    8889
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8889,
                      "name": "gdUBI",
                      "nodeType": "VariableDeclaration",
                      "scope": 8945,
                      "src": "13142:13:26",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8888,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "13142:7:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8894,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8892,
                        "name": "gdInterest",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8870,
                        "src": "13179:10:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 8890,
                        "name": "gdInterestToMint",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8839,
                        "src": "13158:16:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 8891,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sub",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 21263,
                      "src": "13158:20:26",
                      "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": 8893,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13158:32:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "13142:48:26"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8900,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 8895,
                      "name": "gdUBI",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8889,
                      "src": "13200:5:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 8898,
                          "name": "gdExpansionToMint",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8882,
                          "src": "13218:17:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 8896,
                          "name": "gdUBI",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8889,
                          "src": "13208:5:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 8897,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "add",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 21287,
                        "src": "13208:9:26",
                        "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": 8899,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "13208:28:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "13200:36:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 8901,
                  "nodeType": "ExpressionStatement",
                  "src": "13200:36:26"
                },
                {
                  "assignments": [
                    8903
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8903,
                      "name": "toMint",
                      "nodeType": "VariableDeclaration",
                      "scope": 8945,
                      "src": "13246:14:26",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8902,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "13246:7:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8908,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8906,
                        "name": "gdInterest",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8870,
                        "src": "13273:10:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 8904,
                        "name": "gdUBI",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8889,
                        "src": "13263:5:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 8905,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "add",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 21287,
                      "src": "13263:9:26",
                      "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": 8907,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13263:21:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "13246:38:26"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8917,
                        "name": "fundManager",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8360,
                        "src": "13344:11:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8918,
                        "name": "toMint",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8903,
                        "src": "13357:6:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 8911,
                                    "name": "avatar",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 861,
                                    "src": "13316:6:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_Avatar_$12705",
                                      "typeString": "contract Avatar"
                                    }
                                  },
                                  "id": 8912,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "nativeToken",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 12441,
                                  "src": "13316:18:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_view$__$returns$_t_contract$_DAOToken_$14470_$",
                                    "typeString": "function () view external returns (contract DAOToken)"
                                  }
                                },
                                "id": 8913,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "13316:20:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_DAOToken_$14470",
                                  "typeString": "contract DAOToken"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_DAOToken_$14470",
                                  "typeString": "contract DAOToken"
                                }
                              ],
                              "id": 8910,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "13308:7:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": "address"
                            },
                            "id": 8914,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "13308:29:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 8909,
                          "name": "ERC20Mintable",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 21966,
                          "src": "13294:13:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_ERC20Mintable_$21966_$",
                            "typeString": "type(contract ERC20Mintable)"
                          }
                        },
                        "id": 8915,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "13294:44:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20Mintable_$21966",
                          "typeString": "contract ERC20Mintable"
                        }
                      },
                      "id": 8916,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mint",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 21965,
                      "src": "13294:49:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                        "typeString": "function (address,uint256) external returns (bool)"
                      }
                    },
                    "id": 8919,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13294:70:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 8920,
                  "nodeType": "ExpressionStatement",
                  "src": "13294:70:26"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8927,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 8921,
                      "name": "lastMinted",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8364,
                      "src": "13374:10:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 8925,
                          "name": "blockInterval",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8362,
                          "src": "13404:13:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 8922,
                            "name": "block",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 22161,
                            "src": "13387:5:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_block",
                              "typeString": "block"
                            }
                          },
                          "id": 8923,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "number",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "13387:12:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 8924,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "div",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 21239,
                        "src": "13387:16:26",
                        "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": 8926,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "13387:31:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "13374:44:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 8928,
                  "nodeType": "ExpressionStatement",
                  "src": "13374:44:26"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8930,
                        "name": "lastMinted",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8364,
                        "src": "13456:10:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 8932,
                            "name": "_interestToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8808,
                            "src": "13488:14:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ERC20_$21849",
                              "typeString": "contract ERC20"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_ERC20_$21849",
                              "typeString": "contract ERC20"
                            }
                          ],
                          "id": 8931,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "13480:7:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 8933,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "13480:23:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8934,
                        "name": "_transfered",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8810,
                        "src": "13517:11:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8935,
                        "name": "gdInterestToMint",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8839,
                        "src": "13542:16:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8936,
                        "name": "gdExpansionToMint",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8882,
                        "src": "13572:17:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8937,
                        "name": "gdInterest",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8870,
                        "src": "13603:10:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8938,
                        "name": "gdUBI",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8889,
                        "src": "13627:5:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 8929,
                      "name": "UBIMinted",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8445,
                      "src": "13433:9:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (uint256,address,uint256,uint256,uint256,uint256,uint256)"
                      }
                    },
                    "id": 8939,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13433:209:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8940,
                  "nodeType": "EmitStatement",
                  "src": "13428:214:26"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "components": [
                      {
                        "argumentTypes": null,
                        "id": 8941,
                        "name": "gdInterest",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8870,
                        "src": "13660:10:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8942,
                        "name": "gdUBI",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8889,
                        "src": "13672:5:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "id": 8943,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "13659:19:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                      "typeString": "tuple(uint256,uint256)"
                    }
                  },
                  "functionReturnParameters": 8825,
                  "id": 8944,
                  "nodeType": "Return",
                  "src": "13652:26:26"
                }
              ]
            },
            "documentation": "@dev Anyone can call this to trigger calculations.\nReserve sends UBI to Avatar DAO and returns interest to FundManager.\n@param _interestToken The token that was transfered to the reserve\n@param _transfered How much was transfered to the reserve for UBI in `_interestToken`\n@param _interest Out of total transfered how much is the interest (in `_interestToken`)\nthat needs to be paid back (some interest might be donated)\n@return (gdInterest, gdUBI) How much GD interest was minted and how much GD UBI was minted",
            "id": 8946,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 8815,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8814,
                  "name": "requireActive",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 882,
                  "src": "12501:13:26",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "12501:13:26"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 8817,
                    "name": "_interestToken",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8808,
                    "src": "12532:14:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$21849",
                      "typeString": "contract ERC20"
                    }
                  }
                ],
                "id": 8818,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8816,
                  "name": "onlyCDai",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 8395,
                  "src": "12523:8:26",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_contract$_ERC20_$21849_$",
                    "typeString": "modifier (contract ERC20)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "12523:24:26"
              },
              {
                "arguments": null,
                "id": 8820,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8819,
                  "name": "onlyFundManager",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 8378,
                  "src": "12556:15:26",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "12556:15:26"
              }
            ],
            "name": "mintInterestAndUBI",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8813,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8808,
                  "name": "_interestToken",
                  "nodeType": "VariableDeclaration",
                  "scope": 8946,
                  "src": "12395:20:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ERC20_$21849",
                    "typeString": "contract ERC20"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8807,
                    "name": "ERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21849,
                    "src": "12395:5:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$21849",
                      "typeString": "contract ERC20"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8810,
                  "name": "_transfered",
                  "nodeType": "VariableDeclaration",
                  "scope": 8946,
                  "src": "12425:19:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8809,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "12425:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8812,
                  "name": "_interest",
                  "nodeType": "VariableDeclaration",
                  "scope": 8946,
                  "src": "12454:17:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8811,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "12454:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12385:92:26"
            },
            "returnParameters": {
              "id": 8825,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8822,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8946,
                  "src": "12589:7:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8821,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "12589:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8824,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8946,
                  "src": "12598:7:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8823,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "12598:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12588:18:26"
            },
            "scope": 9043,
            "src": "12358:1327:26",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 9017,
              "nodeType": "Block",
              "src": "14043:610:26",
              "statements": [
                {
                  "assignments": [
                    8952
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8952,
                      "name": "remainingReserve",
                      "nodeType": "VariableDeclaration",
                      "scope": 9017,
                      "src": "14118:24:26",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8951,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "14118:7:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8959,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 8956,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 22311,
                            "src": "14168:4:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_GoodReserveCDai_$9043",
                              "typeString": "contract GoodReserveCDai"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_GoodReserveCDai_$9043",
                              "typeString": "contract GoodReserveCDai"
                            }
                          ],
                          "id": 8955,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "14160:7:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 8957,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "14160:13:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 8953,
                        "name": "cDai",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8356,
                        "src": "14145:4:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_cERC20_$8327",
                          "typeString": "contract cERC20"
                        }
                      },
                      "id": 8954,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "balanceOf",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 8317,
                      "src": "14145:14:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                        "typeString": "function (address) view external returns (uint256)"
                      }
                    },
                    "id": 8958,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14145:29:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "14118:56:26"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 8962,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 8960,
                      "name": "remainingReserve",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8952,
                      "src": "14188:16:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 8961,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "14207:1:26",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "14188:20:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 8975,
                  "nodeType": "IfStatement",
                  "src": "14184:178:26",
                  "trueBody": {
                    "id": 8974,
                    "nodeType": "Block",
                    "src": "14210:152:26",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 8967,
                                      "name": "avatar",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 861,
                                      "src": "14271:6:26",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_Avatar_$12705",
                                        "typeString": "contract Avatar"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_contract$_Avatar_$12705",
                                        "typeString": "contract Avatar"
                                      }
                                    ],
                                    "id": 8966,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "14263:7:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_address_$",
                                      "typeString": "type(address)"
                                    },
                                    "typeName": "address"
                                  },
                                  "id": 8968,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "14263:15:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address_payable",
                                    "typeString": "address payable"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 8969,
                                  "name": "remainingReserve",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8952,
                                  "src": "14280:16:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address_payable",
                                    "typeString": "address payable"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 8964,
                                  "name": "cDai",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8356,
                                  "src": "14249:4:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_cERC20_$8327",
                                    "typeString": "contract cERC20"
                                  }
                                },
                                "id": 8965,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "transfer",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 8326,
                                "src": "14249:13:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                                  "typeString": "function (address,uint256) external returns (bool)"
                                }
                              },
                              "id": 8970,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "14249:48:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "63646169207472616e73666572206661696c6564",
                              "id": 8971,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "14315:22:26",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_ee6fcf4e0c6a3f3ba08a53c912b0652776da731b8ba529f52dfcb696ea92b55b",
                                "typeString": "literal_string \"cdai transfer failed\""
                              },
                              "value": "cdai transfer failed"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_ee6fcf4e0c6a3f3ba08a53c912b0652776da731b8ba529f52dfcb696ea92b55b",
                                "typeString": "literal_string \"cdai transfer failed\""
                              }
                            ],
                            "id": 8963,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              22174,
                              22175
                            ],
                            "referencedDeclaration": 22175,
                            "src": "14224:7:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 8972,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "14224:127:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 8973,
                        "nodeType": "ExpressionStatement",
                        "src": "14224:127:26"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 8984,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 8980,
                                  "name": "this",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 22311,
                                  "src": "14402:4:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_GoodReserveCDai_$9043",
                                    "typeString": "contract GoodReserveCDai"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_GoodReserveCDai_$9043",
                                    "typeString": "contract GoodReserveCDai"
                                  }
                                ],
                                "id": 8979,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "14394:7:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": "address"
                              },
                              "id": 8981,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "14394:13:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 8977,
                              "name": "cDai",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8356,
                              "src": "14379:4:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_cERC20_$8327",
                                "typeString": "contract cERC20"
                              }
                            },
                            "id": 8978,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "balanceOf",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 8317,
                            "src": "14379:14:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                              "typeString": "function (address) view external returns (uint256)"
                            }
                          },
                          "id": 8982,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "14379:29:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 8983,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "14412:1:26",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "14379:34:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "46756e6473207472616e7366657220686173206661696c6564",
                        "id": 8985,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "14415:27:26",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_3c43d2089fde162746b7f79ca82a944c5d81589be0a9addf7c07e40869d26592",
                          "typeString": "literal_string \"Funds transfer has failed\""
                        },
                        "value": "Funds transfer has failed"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_3c43d2089fde162746b7f79ca82a944c5d81589be0a9addf7c07e40869d26592",
                          "typeString": "literal_string \"Funds transfer has failed\""
                        }
                      ],
                      "id": 8976,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        22174,
                        22175
                      ],
                      "referencedDeclaration": 22175,
                      "src": "14371:7:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 8986,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14371:72:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8987,
                  "nodeType": "ExpressionStatement",
                  "src": "14371:72:26"
                },
                {
                  "assignments": [
                    8989
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8989,
                      "name": "gooddollar",
                      "nodeType": "VariableDeclaration",
                      "scope": 9017,
                      "src": "14453:21:26",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_GoodDollar_$3767",
                        "typeString": "contract GoodDollar"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 8988,
                        "name": "GoodDollar",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 3767,
                        "src": "14453:10:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_GoodDollar_$3767",
                          "typeString": "contract GoodDollar"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8997,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "expression": {
                                "argumentTypes": null,
                                "id": 8992,
                                "name": "avatar",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 861,
                                "src": "14496:6:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_Avatar_$12705",
                                  "typeString": "contract Avatar"
                                }
                              },
                              "id": 8993,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "nativeToken",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 12441,
                              "src": "14496:18:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_view$__$returns$_t_contract$_DAOToken_$14470_$",
                                "typeString": "function () view external returns (contract DAOToken)"
                              }
                            },
                            "id": 8994,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "14496:20:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_DAOToken_$14470",
                              "typeString": "contract DAOToken"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_DAOToken_$14470",
                              "typeString": "contract DAOToken"
                            }
                          ],
                          "id": 8991,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "14488:7:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 8995,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "14488:29:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 8990,
                      "name": "GoodDollar",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3767,
                      "src": "14477:10:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_GoodDollar_$3767_$",
                        "typeString": "type(contract GoodDollar)"
                      }
                    },
                    "id": 8996,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14477:41:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_GoodDollar_$3767",
                      "typeString": "contract GoodDollar"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "14453:65:26"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 9002,
                            "name": "avatar",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 861,
                            "src": "14566:6:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_Avatar_$12705",
                              "typeString": "contract Avatar"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_Avatar_$12705",
                              "typeString": "contract Avatar"
                            }
                          ],
                          "id": 9001,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "14558:7:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 9003,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "14558:15:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 8998,
                        "name": "marketMaker",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8358,
                        "src": "14528:11:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_GoodMarketMaker_$8274",
                          "typeString": "contract GoodMarketMaker"
                        }
                      },
                      "id": 9000,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "transferOwnership",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 21393,
                      "src": "14528:29:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address) external"
                      }
                    },
                    "id": 9004,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14528:46:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9005,
                  "nodeType": "ExpressionStatement",
                  "src": "14528:46:26"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 9006,
                        "name": "gooddollar",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8989,
                        "src": "14584:10:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_GoodDollar_$3767",
                          "typeString": "contract GoodDollar"
                        }
                      },
                      "id": 9008,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "renounceMinter",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 20811,
                      "src": "14584:25:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$__$returns$__$",
                        "typeString": "function () external"
                      }
                    },
                    "id": 9009,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14584:27:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9010,
                  "nodeType": "ExpressionStatement",
                  "src": "14584:27:26"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 9014,
                        "name": "avatar",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 861,
                        "src": "14639:6:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Avatar_$12705",
                          "typeString": "contract Avatar"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_Avatar_$12705",
                          "typeString": "contract Avatar"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 9011,
                        "name": "super",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 22312,
                        "src": "14621:5:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_super$_GoodReserveCDai_$9043",
                          "typeString": "contract super GoodReserveCDai"
                        }
                      },
                      "id": 9013,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "internalEnd",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1003,
                      "src": "14621:17:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_Avatar_$12705_$returns$__$",
                        "typeString": "function (contract Avatar)"
                      }
                    },
                    "id": 9015,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14621:25:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9016,
                  "nodeType": "ExpressionStatement",
                  "src": "14621:25:26"
                }
              ]
            },
            "documentation": "@dev Making the contract inactive after it has transferred the cDAI funds to `_avatar`\nand has transferred the market maker ownership to `_avatar`. Inactive means that\nbuy / sell / mintInterestAndUBI actions will no longer be active. Only the Avatar can\nexecutes this method",
            "id": 9018,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 8949,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8948,
                  "name": "onlyAvatar",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1325,
                  "src": "14032:10:26",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "14032:10:26"
              }
            ],
            "name": "end",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8947,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "14022:2:26"
            },
            "returnParameters": {
              "id": 8950,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "14043:0:26"
            },
            "scope": 9043,
            "src": "14010:643:26",
            "stateMutability": "nonpayable",
            "superFunction": 979,
            "visibility": "public"
          },
          {
            "body": {
              "id": 9041,
              "nodeType": "Block",
              "src": "14844:152:26",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 9029,
                                "name": "avatar",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 861,
                                "src": "14899:6:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_Avatar_$12705",
                                  "typeString": "contract Avatar"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_Avatar_$12705",
                                  "typeString": "contract Avatar"
                                }
                              ],
                              "id": 9028,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "14891:7:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": "address"
                            },
                            "id": 9030,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "14891:15:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 9034,
                                    "name": "this",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 22311,
                                    "src": "14933:4:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_GoodReserveCDai_$9043",
                                      "typeString": "contract GoodReserveCDai"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_contract$_GoodReserveCDai_$9043",
                                      "typeString": "contract GoodReserveCDai"
                                    }
                                  ],
                                  "id": 9033,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "14925:7:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_address_$",
                                    "typeString": "type(address)"
                                  },
                                  "typeName": "address"
                                },
                                "id": 9035,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "14925:13:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 9031,
                                "name": "_token",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9020,
                                "src": "14908:6:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_ERC20_$21849",
                                  "typeString": "contract ERC20"
                                }
                              },
                              "id": 9032,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "balanceOf",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 21458,
                              "src": "14908:16:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                                "typeString": "function (address) view external returns (uint256)"
                              }
                            },
                            "id": 9036,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "14908:31:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 9026,
                            "name": "_token",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9020,
                            "src": "14875:6:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ERC20_$21849",
                              "typeString": "contract ERC20"
                            }
                          },
                          "id": 9027,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "transfer",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 21493,
                          "src": "14875:15:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                            "typeString": "function (address,uint256) external returns (bool)"
                          }
                        },
                        "id": 9037,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "14875:65:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "7265636f766572207472616e73666572206661696c6564",
                        "id": 9038,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "14954:25:26",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_41a03013a5674cc54e9badb52c47e3c4670bc54fa0765e5276b5118633f8aeb3",
                          "typeString": "literal_string \"recover transfer failed\""
                        },
                        "value": "recover transfer failed"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_41a03013a5674cc54e9badb52c47e3c4670bc54fa0765e5276b5118633f8aeb3",
                          "typeString": "literal_string \"recover transfer failed\""
                        }
                      ],
                      "id": 9025,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        22174,
                        22175
                      ],
                      "referencedDeclaration": 22175,
                      "src": "14854:7:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 9039,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14854:135:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9040,
                  "nodeType": "ExpressionStatement",
                  "src": "14854:135:26"
                }
              ]
            },
            "documentation": "@dev method to recover any stuck erc20 tokens (ie compound COMP)\n@param _token the ERC20 token to recover",
            "id": 9042,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 9023,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 9022,
                  "name": "onlyAvatar",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1325,
                  "src": "14833:10:26",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "14833:10:26"
              }
            ],
            "name": "recover",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 9021,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9020,
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 9042,
                  "src": "14812:12:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ERC20_$21849",
                    "typeString": "contract ERC20"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 9019,
                    "name": "ERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21849,
                    "src": "14812:5:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$21849",
                      "typeString": "contract ERC20"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "14811:14:26"
            },
            "returnParameters": {
              "id": 9024,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "14844:0:26"
            },
            "scope": 9043,
            "src": "14795:201:26",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          }
        ],
        "scope": 9044,
        "src": "1355:13643:26"
      }
    ],
    "src": "0:14999:26"
  },
  "legacyAST": {
    "absolutePath": "/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/stakingModel/contracts/GoodReserveCDai.sol",
    "exportedSymbols": {
      "ContributionCalc": [
        8343
      ],
      "GoodReserveCDai": [
        9043
      ],
      "cERC20": [
        8327
      ]
    },
    "id": 9044,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 8276,
        "literals": [
          "solidity",
          ">",
          "0.5",
          ".4"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:26"
      },
      {
        "absolutePath": "openzeppelin-solidity/contracts/math/SafeMath.sol",
        "file": "openzeppelin-solidity/contracts/math/SafeMath.sol",
        "id": 8277,
        "nodeType": "ImportDirective",
        "scope": 9044,
        "sourceUnit": 21309,
        "src": "25:59:26",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "openzeppelin-solidity/contracts/token/ERC20/ERC20.sol",
        "file": "openzeppelin-solidity/contracts/token/ERC20/ERC20.sol",
        "id": 8278,
        "nodeType": "ImportDirective",
        "scope": 9044,
        "sourceUnit": 21850,
        "src": "85:63:26",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "openzeppelin-solidity/contracts/token/ERC20/ERC20Mintable.sol",
        "file": "openzeppelin-solidity/contracts/token/ERC20/ERC20Mintable.sol",
        "id": 8279,
        "nodeType": "ImportDirective",
        "scope": 9044,
        "sourceUnit": 21967,
        "src": "149:71:26",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "openzeppelin-solidity/contracts/token/ERC20/ERC20Burnable.sol",
        "file": "openzeppelin-solidity/contracts/token/ERC20/ERC20Burnable.sol",
        "id": 8280,
        "nodeType": "ImportDirective",
        "scope": 9044,
        "sourceUnit": 21881,
        "src": "221:71:26",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@daostack/arc/contracts/controller/Avatar.sol",
        "file": "@daostack/arc/contracts/controller/Avatar.sol",
        "id": 8281,
        "nodeType": "ImportDirective",
        "scope": 9044,
        "sourceUnit": 12706,
        "src": "293:55:26",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/dao/schemes/FeelessScheme.sol",
        "file": "../../contracts/dao/schemes/FeelessScheme.sol",
        "id": 8282,
        "nodeType": "ImportDirective",
        "scope": 9044,
        "sourceUnit": 1228,
        "src": "349:55:26",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/dao/schemes/ActivePeriod.sol",
        "file": "../../contracts/dao/schemes/ActivePeriod.sol",
        "id": 8283,
        "nodeType": "ImportDirective",
        "scope": 9044,
        "sourceUnit": 1005,
        "src": "405:54:26",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/DSMath.sol",
        "file": "../../contracts/DSMath.sol",
        "id": 8284,
        "nodeType": "ImportDirective",
        "scope": 9044,
        "sourceUnit": 304,
        "src": "460:36:26",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/token/GoodDollar.sol",
        "file": "../../contracts/token/GoodDollar.sol",
        "id": 8285,
        "nodeType": "ImportDirective",
        "scope": 9044,
        "sourceUnit": 3768,
        "src": "497:46:26",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/stakingModel/contracts/GoodMarketMaker.sol",
        "file": "./GoodMarketMaker.sol",
        "id": 8286,
        "nodeType": "ImportDirective",
        "scope": 9044,
        "sourceUnit": 8275,
        "src": "544:31:26",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "interface",
        "documentation": null,
        "fullyImplemented": false,
        "id": 8327,
        "linearizedBaseContracts": [
          8327
        ],
        "name": "cERC20",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": null,
            "documentation": null,
            "id": 8293,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "mint",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8289,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8288,
                  "name": "mintAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 8293,
                  "src": "614:18:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8287,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "614:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "613:20:26"
            },
            "returnParameters": {
              "id": 8292,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8291,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8293,
                  "src": "652:7:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8290,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "652:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "651:9:26"
            },
            "scope": 8327,
            "src": "600:61:26",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": null,
            "id": 8300,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "redeemUnderlying",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8296,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8295,
                  "name": "mintAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 8300,
                  "src": "693:18:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8294,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "693:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "692:20:26"
            },
            "returnParameters": {
              "id": 8299,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8298,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8300,
                  "src": "731:7:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8297,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "731:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "730:9:26"
            },
            "scope": 8327,
            "src": "667:73:26",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": null,
            "id": 8305,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "exchangeRateCurrent",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8301,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "774:2:26"
            },
            "returnParameters": {
              "id": 8304,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8303,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8305,
                  "src": "795:7:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8302,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "795:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "794:9:26"
            },
            "scope": 8327,
            "src": "746:58:26",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": null,
            "id": 8310,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "exchangeRateStored",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8306,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "837:2:26"
            },
            "returnParameters": {
              "id": 8309,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8308,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8310,
                  "src": "863:7:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8307,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "863:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "862:9:26"
            },
            "scope": 8327,
            "src": "810:62:26",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": null,
            "id": 8317,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "balanceOf",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8313,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8312,
                  "name": "addr",
                  "nodeType": "VariableDeclaration",
                  "scope": 8317,
                  "src": "897:12:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8311,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "897:7:26",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "896:14:26"
            },
            "returnParameters": {
              "id": 8316,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8315,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8317,
                  "src": "934:7:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8314,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "934:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "933:9:26"
            },
            "scope": 8327,
            "src": "878:65:26",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": null,
            "id": 8326,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "transfer",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8322,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8319,
                  "name": "to",
                  "nodeType": "VariableDeclaration",
                  "scope": 8326,
                  "src": "967:10:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8318,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "967:7:26",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8321,
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 8326,
                  "src": "979:14:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8320,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "979:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "966:28:26"
            },
            "returnParameters": {
              "id": 8325,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8324,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8326,
                  "src": "1013:4:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 8323,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "1013:4:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1012:6:26"
            },
            "scope": 8327,
            "src": "949:70:26",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          }
        ],
        "scope": 9044,
        "src": "577:444:26"
      },
      {
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "interface",
        "documentation": null,
        "fullyImplemented": false,
        "id": 8343,
        "linearizedBaseContracts": [
          8343
        ],
        "name": "ContributionCalc",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": null,
            "documentation": null,
            "id": 8342,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "calculateContribution",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8338,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8329,
                  "name": "_marketMaker",
                  "nodeType": "VariableDeclaration",
                  "scope": 8342,
                  "src": "1096:28:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_GoodMarketMaker_$8274",
                    "typeString": "contract GoodMarketMaker"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8328,
                    "name": "GoodMarketMaker",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 8274,
                    "src": "1096:15:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_GoodMarketMaker_$8274",
                      "typeString": "contract GoodMarketMaker"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8331,
                  "name": "_reserve",
                  "nodeType": "VariableDeclaration",
                  "scope": 8342,
                  "src": "1134:24:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_GoodReserveCDai_$9043",
                    "typeString": "contract GoodReserveCDai"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8330,
                    "name": "GoodReserveCDai",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 9043,
                    "src": "1134:15:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_GoodReserveCDai_$9043",
                      "typeString": "contract GoodReserveCDai"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8333,
                  "name": "_contributer",
                  "nodeType": "VariableDeclaration",
                  "scope": 8342,
                  "src": "1168:20:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8332,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1168:7:26",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8335,
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 8342,
                  "src": "1198:12:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ERC20_$21849",
                    "typeString": "contract ERC20"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8334,
                    "name": "ERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21849,
                    "src": "1198:5:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$21849",
                      "typeString": "contract ERC20"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8337,
                  "name": "_gdAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 8342,
                  "src": "1220:17:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8336,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1220:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1086:157:26"
            },
            "returnParameters": {
              "id": 8341,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8340,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8342,
                  "src": "1267:7:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8339,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1267:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1266:9:26"
            },
            "scope": 8343,
            "src": "1056:220:26",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          }
        ],
        "scope": 9044,
        "src": "1023:255:26"
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 8344,
              "name": "DSMath",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 303,
              "src": "1383:6:26",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_DSMath_$303",
                "typeString": "contract DSMath"
              }
            },
            "id": 8345,
            "nodeType": "InheritanceSpecifier",
            "src": "1383:6:26"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 8346,
              "name": "FeelessScheme",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 1227,
              "src": "1391:13:26",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_FeelessScheme_$1227",
                "typeString": "contract FeelessScheme"
              }
            },
            "id": 8347,
            "nodeType": "InheritanceSpecifier",
            "src": "1391:13:26"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 8348,
              "name": "ActivePeriod",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 1004,
              "src": "1406:12:26",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ActivePeriod_$1004",
                "typeString": "contract ActivePeriod"
              }
            },
            "id": 8349,
            "nodeType": "InheritanceSpecifier",
            "src": "1406:12:26"
          }
        ],
        "contractDependencies": [
          303,
          1004,
          1227,
          1423,
          2667,
          21417
        ],
        "contractKind": "contract",
        "documentation": "@title Reserve based on cDAI and dynamic reserve ratio market maker",
        "fullyImplemented": true,
        "id": 9043,
        "linearizedBaseContracts": [
          9043,
          1004,
          1227,
          2667,
          1423,
          21417,
          303
        ],
        "name": "GoodReserveCDai",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "id": 8352,
            "libraryName": {
              "contractScope": null,
              "id": 8350,
              "name": "SafeMath",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 21308,
              "src": "1431:8:26",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_SafeMath_$21308",
                "typeString": "library SafeMath"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "1425:27:26",
            "typeName": {
              "id": 8351,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1444:7:26",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            }
          },
          {
            "constant": false,
            "id": 8354,
            "name": "dai",
            "nodeType": "VariableDeclaration",
            "scope": 9043,
            "src": "1483:16:26",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_ERC20_$21849",
              "typeString": "contract ERC20"
            },
            "typeName": {
              "contractScope": null,
              "id": 8353,
              "name": "ERC20",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 21849,
              "src": "1483:5:26",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ERC20_$21849",
                "typeString": "contract ERC20"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 8356,
            "name": "cDai",
            "nodeType": "VariableDeclaration",
            "scope": 9043,
            "src": "1532:18:26",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_cERC20_$8327",
              "typeString": "contract cERC20"
            },
            "typeName": {
              "contractScope": null,
              "id": 8355,
              "name": "cERC20",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 8327,
              "src": "1532:6:26",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_cERC20_$8327",
                "typeString": "contract cERC20"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 8358,
            "name": "marketMaker",
            "nodeType": "VariableDeclaration",
            "scope": 9043,
            "src": "1686:34:26",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_GoodMarketMaker_$8274",
              "typeString": "contract GoodMarketMaker"
            },
            "typeName": {
              "contractScope": null,
              "id": 8357,
              "name": "GoodMarketMaker",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 8274,
              "src": "1686:15:26",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_GoodMarketMaker_$8274",
                "typeString": "contract GoodMarketMaker"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 8360,
            "name": "fundManager",
            "nodeType": "VariableDeclaration",
            "scope": 9043,
            "src": "1821:26:26",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 8359,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "1821:7:26",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 8362,
            "name": "blockInterval",
            "nodeType": "VariableDeclaration",
            "scope": 9043,
            "src": "1994:28:26",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 8361,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1994:7:26",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 8364,
            "name": "lastMinted",
            "nodeType": "VariableDeclaration",
            "scope": 9043,
            "src": "2113:25:26",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 8363,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "2113:7:26",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 8366,
            "name": "contribution",
            "nodeType": "VariableDeclaration",
            "scope": 9043,
            "src": "2262:36:26",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_ContributionCalc_$8343",
              "typeString": "contract ContributionCalc"
            },
            "typeName": {
              "contractScope": null,
              "id": 8365,
              "name": "ContributionCalc",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 8343,
              "src": "2262:16:26",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ContributionCalc_$8343",
                "typeString": "contract ContributionCalc"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 8377,
              "nodeType": "Block",
              "src": "2330:103:26",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 8372,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 8369,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 22171,
                            "src": "2348:3:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 8370,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "2348:10:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 8371,
                          "name": "fundManager",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8360,
                          "src": "2362:11:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "2348:25:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4f6e6c792046756e644d616e616765722063616e2063616c6c2074686973206d6574686f64",
                        "id": 8373,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2375:39:26",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_8659903c14beb1decb5cde807aae2b42823801f7a2ec9f1cb2d42f84ff652fab",
                          "typeString": "literal_string \"Only FundManager can call this method\""
                        },
                        "value": "Only FundManager can call this method"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_8659903c14beb1decb5cde807aae2b42823801f7a2ec9f1cb2d42f84ff652fab",
                          "typeString": "literal_string \"Only FundManager can call this method\""
                        }
                      ],
                      "id": 8368,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        22174,
                        22175
                      ],
                      "referencedDeclaration": 22175,
                      "src": "2340:7:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 8374,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2340:75:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8375,
                  "nodeType": "ExpressionStatement",
                  "src": "2340:75:26"
                },
                {
                  "id": 8376,
                  "nodeType": "PlaceholderStatement",
                  "src": "2425:1:26"
                }
              ]
            },
            "documentation": null,
            "id": 8378,
            "name": "onlyFundManager",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 8367,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2330:0:26"
            },
            "src": "2305:128:26",
            "visibility": "internal"
          },
          {
            "body": {
              "id": 8394,
              "nodeType": "Block",
              "src": "2470:94:26",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 8389,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 8384,
                              "name": "token",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8380,
                              "src": "2496:5:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ERC20_$21849",
                                "typeString": "contract ERC20"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_ERC20_$21849",
                                "typeString": "contract ERC20"
                              }
                            ],
                            "id": 8383,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "2488:7:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 8385,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2488:14:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 8387,
                              "name": "cDai",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8356,
                              "src": "2514:4:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_cERC20_$8327",
                                "typeString": "contract cERC20"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_cERC20_$8327",
                                "typeString": "contract cERC20"
                              }
                            ],
                            "id": 8386,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "2506:7:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 8388,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2506:13:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "2488:31:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4f6e6c79206344414920697320737570706f72746564",
                        "id": 8390,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2521:24:26",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_6611800b21faf1cbaf099b967ab2df71f07063bb467267da93bacb005dc2712f",
                          "typeString": "literal_string \"Only cDAI is supported\""
                        },
                        "value": "Only cDAI is supported"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_6611800b21faf1cbaf099b967ab2df71f07063bb467267da93bacb005dc2712f",
                          "typeString": "literal_string \"Only cDAI is supported\""
                        }
                      ],
                      "id": 8382,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        22174,
                        22175
                      ],
                      "referencedDeclaration": 22175,
                      "src": "2480:7:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 8391,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2480:66:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8392,
                  "nodeType": "ExpressionStatement",
                  "src": "2480:66:26"
                },
                {
                  "id": 8393,
                  "nodeType": "PlaceholderStatement",
                  "src": "2556:1:26"
                }
              ]
            },
            "documentation": null,
            "id": 8395,
            "name": "onlyCDai",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 8381,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8380,
                  "name": "token",
                  "nodeType": "VariableDeclaration",
                  "scope": 8395,
                  "src": "2457:11:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ERC20_$21849",
                    "typeString": "contract ERC20"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8379,
                    "name": "ERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21849,
                    "src": "2457:5:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$21849",
                      "typeString": "contract ERC20"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2456:13:26"
            },
            "src": "2439:125:26",
            "visibility": "internal"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 8407,
            "name": "TokenPurchased",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 8406,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8397,
                  "indexed": true,
                  "name": "caller",
                  "nodeType": "VariableDeclaration",
                  "scope": 8407,
                  "src": "2680:22:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8396,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2680:7:26",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8399,
                  "indexed": true,
                  "name": "reserveToken",
                  "nodeType": "VariableDeclaration",
                  "scope": 8407,
                  "src": "2815:28:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8398,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2815:7:26",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8401,
                  "indexed": false,
                  "name": "reserveAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 8407,
                  "src": "2886:21:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8400,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2886:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8403,
                  "indexed": false,
                  "name": "minReturn",
                  "nodeType": "VariableDeclaration",
                  "scope": 8407,
                  "src": "2990:17:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8402,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2990:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8405,
                  "indexed": false,
                  "name": "actualReturn",
                  "nodeType": "VariableDeclaration",
                  "scope": 8407,
                  "src": "3074:20:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8404,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3074:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2632:468:26"
            },
            "src": "2612:489:26"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 8421,
            "name": "TokenSold",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 8420,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8409,
                  "indexed": true,
                  "name": "caller",
                  "nodeType": "VariableDeclaration",
                  "scope": 8421,
                  "src": "3207:22:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8408,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3207:7:26",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8411,
                  "indexed": true,
                  "name": "reserveToken",
                  "nodeType": "VariableDeclaration",
                  "scope": 8421,
                  "src": "3335:28:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8410,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3335:7:26",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8413,
                  "indexed": false,
                  "name": "gdAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 8421,
                  "src": "3401:16:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8412,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3401:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8415,
                  "indexed": false,
                  "name": "contributionAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 8421,
                  "src": "3527:26:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8414,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3527:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8417,
                  "indexed": false,
                  "name": "minReturn",
                  "nodeType": "VariableDeclaration",
                  "scope": 8421,
                  "src": "3648:17:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8416,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3648:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8419,
                  "indexed": false,
                  "name": "actualReturn",
                  "nodeType": "VariableDeclaration",
                  "scope": 8421,
                  "src": "3732:20:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8418,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3732:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3159:599:26"
            },
            "src": "3144:615:26"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 8429,
            "name": "ContributionAddressUpdated",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 8428,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8423,
                  "indexed": true,
                  "name": "caller",
                  "nodeType": "VariableDeclaration",
                  "scope": 8429,
                  "src": "3915:22:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8422,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3915:7:26",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8425,
                  "indexed": false,
                  "name": "prevAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 8429,
                  "src": "4008:19:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8424,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4008:7:26",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8427,
                  "indexed": false,
                  "name": "newAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 8429,
                  "src": "4101:18:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8426,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4101:7:26",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3867:258:26"
            },
            "src": "3835:291:26"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 8445,
            "name": "UBIMinted",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 8444,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8431,
                  "indexed": true,
                  "name": "day",
                  "nodeType": "VariableDeclaration",
                  "scope": 8445,
                  "src": "4219:19:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8430,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4219:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8433,
                  "indexed": true,
                  "name": "interestToken",
                  "nodeType": "VariableDeclaration",
                  "scope": 8445,
                  "src": "4285:29:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8432,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4285:7:26",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8435,
                  "indexed": false,
                  "name": "interestReceived",
                  "nodeType": "VariableDeclaration",
                  "scope": 8445,
                  "src": "4379:24:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8434,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4379:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8437,
                  "indexed": false,
                  "name": "gdInterestMinted",
                  "nodeType": "VariableDeclaration",
                  "scope": 8445,
                  "src": "4525:24:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8436,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4525:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8439,
                  "indexed": false,
                  "name": "gdExpansionMinted",
                  "nodeType": "VariableDeclaration",
                  "scope": 8445,
                  "src": "4672:25:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8438,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4672:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8441,
                  "indexed": false,
                  "name": "gdInterestTransferred",
                  "nodeType": "VariableDeclaration",
                  "scope": 8445,
                  "src": "4792:29:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8440,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4792:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8443,
                  "indexed": false,
                  "name": "gdUbiTransferred",
                  "nodeType": "VariableDeclaration",
                  "scope": 8445,
                  "src": "4911:24:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8442,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4911:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4186:755:26"
            },
            "src": "4171:771:26"
          },
          {
            "body": {
              "id": 8509,
              "nodeType": "Block",
              "src": "5794:270:26",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8477,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 8475,
                      "name": "dai",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8354,
                      "src": "5804:3:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ERC20_$21849",
                        "typeString": "contract ERC20"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 8476,
                      "name": "_dai",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8447,
                      "src": "5810:4:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ERC20_$21849",
                        "typeString": "contract ERC20"
                      }
                    },
                    "src": "5804:10:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$21849",
                      "typeString": "contract ERC20"
                    }
                  },
                  "id": 8478,
                  "nodeType": "ExpressionStatement",
                  "src": "5804:10:26"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8481,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 8479,
                      "name": "cDai",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8356,
                      "src": "5824:4:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_cERC20_$8327",
                        "typeString": "contract cERC20"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 8480,
                      "name": "_cDai",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8449,
                      "src": "5831:5:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_cERC20_$8327",
                        "typeString": "contract cERC20"
                      }
                    },
                    "src": "5824:12:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_cERC20_$8327",
                      "typeString": "contract cERC20"
                    }
                  },
                  "id": 8482,
                  "nodeType": "ExpressionStatement",
                  "src": "5824:12:26"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8485,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 8483,
                      "name": "fundManager",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8360,
                      "src": "5846:11:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 8484,
                      "name": "_fundManager",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8451,
                      "src": "5860:12:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "5846:26:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 8486,
                  "nodeType": "ExpressionStatement",
                  "src": "5846:26:26"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8491,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 8487,
                      "name": "marketMaker",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8358,
                      "src": "5882:11:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_GoodMarketMaker_$8274",
                        "typeString": "contract GoodMarketMaker"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 8489,
                          "name": "_marketMaker",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8457,
                          "src": "5912:12:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 8488,
                        "name": "GoodMarketMaker",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8274,
                        "src": "5896:15:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_GoodMarketMaker_$8274_$",
                          "typeString": "type(contract GoodMarketMaker)"
                        }
                      },
                      "id": 8490,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "5896:29:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_GoodMarketMaker_$8274",
                        "typeString": "contract GoodMarketMaker"
                      }
                    },
                    "src": "5882:43:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_GoodMarketMaker_$8274",
                      "typeString": "contract GoodMarketMaker"
                    }
                  },
                  "id": 8492,
                  "nodeType": "ExpressionStatement",
                  "src": "5882:43:26"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8495,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 8493,
                      "name": "blockInterval",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8362,
                      "src": "5935:13:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 8494,
                      "name": "_blockInterval",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8461,
                      "src": "5951:14:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "5935:30:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 8496,
                  "nodeType": "ExpressionStatement",
                  "src": "5935:30:26"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8503,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 8497,
                      "name": "lastMinted",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8364,
                      "src": "5975:10:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 8501,
                          "name": "blockInterval",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8362,
                          "src": "6005:13:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 8498,
                            "name": "block",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 22161,
                            "src": "5988:5:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_block",
                              "typeString": "block"
                            }
                          },
                          "id": 8499,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "number",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "5988:12:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 8500,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "div",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 21239,
                        "src": "5988:16:26",
                        "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": 8502,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "5988:31:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "5975:44:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 8504,
                  "nodeType": "ExpressionStatement",
                  "src": "5975:44:26"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8507,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 8505,
                      "name": "contribution",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8366,
                      "src": "6029:12:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ContributionCalc_$8343",
                        "typeString": "contract ContributionCalc"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 8506,
                      "name": "_contribution",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8459,
                      "src": "6044:13:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ContributionCalc_$8343",
                        "typeString": "contract ContributionCalc"
                      }
                    },
                    "src": "6029:28:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ContributionCalc_$8343",
                      "typeString": "contract ContributionCalc"
                    }
                  },
                  "id": 8508,
                  "nodeType": "ExpressionStatement",
                  "src": "6029:28:26"
                }
              ]
            },
            "documentation": "@dev Constructor\n@param _dai The address of DAI\n@param _cDai The address of cDAI\n@param _fundManager The address of the fund manager contract\n@param _avatar The avatar of the DAO\n@param _identity The identity contract\n@param _marketMaker The address of the market maker contract\n@param _contribution The address of the contribution contract\n@param _blockInterval How many blocks should be passed before the next execution of `mintInterestAndUBI`",
            "id": 8510,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 8464,
                    "name": "_identity",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8455,
                    "src": "5738:9:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Identity_$2380",
                      "typeString": "contract Identity"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 8465,
                    "name": "_avatar",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8453,
                    "src": "5749:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Avatar_$12705",
                      "typeString": "contract Avatar"
                    }
                  }
                ],
                "id": 8466,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8463,
                  "name": "FeelessScheme",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1227,
                  "src": "5724:13:26",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_FeelessScheme_$1227_$",
                    "typeString": "type(contract FeelessScheme)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "5724:33:26"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 8468,
                    "name": "now",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 22173,
                    "src": "5771:3:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 8471,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 8469,
                      "name": "now",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 22173,
                      "src": "5776:3:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "*",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "32",
                      "id": 8470,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "5782:1:26",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_2_by_1",
                        "typeString": "int_const 2"
                      },
                      "value": "2"
                    },
                    "src": "5776:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 8472,
                    "name": "_avatar",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8453,
                    "src": "5785:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Avatar_$12705",
                      "typeString": "contract Avatar"
                    }
                  }
                ],
                "id": 8473,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8467,
                  "name": "ActivePeriod",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1004,
                  "src": "5758:12:26",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_ActivePeriod_$1004_$",
                    "typeString": "type(contract ActivePeriod)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "5758:35:26"
              }
            ],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8462,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8447,
                  "name": "_dai",
                  "nodeType": "VariableDeclaration",
                  "scope": 8510,
                  "src": "5494:10:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ERC20_$21849",
                    "typeString": "contract ERC20"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8446,
                    "name": "ERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21849,
                    "src": "5494:5:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$21849",
                      "typeString": "contract ERC20"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8449,
                  "name": "_cDai",
                  "nodeType": "VariableDeclaration",
                  "scope": 8510,
                  "src": "5514:12:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_cERC20_$8327",
                    "typeString": "contract cERC20"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8448,
                    "name": "cERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 8327,
                    "src": "5514:6:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_cERC20_$8327",
                      "typeString": "contract cERC20"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8451,
                  "name": "_fundManager",
                  "nodeType": "VariableDeclaration",
                  "scope": 8510,
                  "src": "5536:20:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8450,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5536:7:26",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8453,
                  "name": "_avatar",
                  "nodeType": "VariableDeclaration",
                  "scope": 8510,
                  "src": "5566:14:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_Avatar_$12705",
                    "typeString": "contract Avatar"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8452,
                    "name": "Avatar",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 12705,
                    "src": "5566:6:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Avatar_$12705",
                      "typeString": "contract Avatar"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8455,
                  "name": "_identity",
                  "nodeType": "VariableDeclaration",
                  "scope": 8510,
                  "src": "5590:18:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_Identity_$2380",
                    "typeString": "contract Identity"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8454,
                    "name": "Identity",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 2380,
                    "src": "5590:8:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Identity_$2380",
                      "typeString": "contract Identity"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8457,
                  "name": "_marketMaker",
                  "nodeType": "VariableDeclaration",
                  "scope": 8510,
                  "src": "5618:20:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8456,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5618:7:26",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8459,
                  "name": "_contribution",
                  "nodeType": "VariableDeclaration",
                  "scope": 8510,
                  "src": "5648:30:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ContributionCalc_$8343",
                    "typeString": "contract ContributionCalc"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8458,
                    "name": "ContributionCalc",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 8343,
                    "src": "5648:16:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ContributionCalc_$8343",
                      "typeString": "contract ContributionCalc"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8461,
                  "name": "_blockInterval",
                  "nodeType": "VariableDeclaration",
                  "scope": 8510,
                  "src": "5688:22:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8460,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5688:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5484:232:26"
            },
            "returnParameters": {
              "id": 8474,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5794:0:26"
            },
            "scope": 9043,
            "src": "5473:591:26",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 8542,
              "nodeType": "Block",
              "src": "6255:302:26",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 8515,
                      "name": "addRights",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1203,
                      "src": "6265:9:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 8516,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6265:11:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8517,
                  "nodeType": "ExpressionStatement",
                  "src": "6265:11:26"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "expression": {
                                "argumentTypes": null,
                                "id": 8522,
                                "name": "avatar",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 861,
                                "src": "6387:6:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_Avatar_$12705",
                                  "typeString": "contract Avatar"
                                }
                              },
                              "id": 8523,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "nativeToken",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 12441,
                              "src": "6387:18:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_view$__$returns$_t_contract$_DAOToken_$14470_$",
                                "typeString": "function () view external returns (contract DAOToken)"
                              }
                            },
                            "id": 8524,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "6387:20:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_DAOToken_$14470",
                              "typeString": "contract DAOToken"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_DAOToken_$14470",
                              "typeString": "contract DAOToken"
                            }
                          ],
                          "id": 8521,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "6379:7:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 8525,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "6379:29:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "6164644d696e746572286164647265737329",
                            "id": 8528,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "6446:20:26",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_983b2d560bdd6b422e26073d9516b4646e2f1008810070c0d32b3a79aaa7bfcb",
                              "typeString": "literal_string \"addMinter(address)\""
                            },
                            "value": "addMinter(address)"
                          },
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 8530,
                                "name": "this",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 22311,
                                "src": "6476:4:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_GoodReserveCDai_$9043",
                                  "typeString": "contract GoodReserveCDai"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_GoodReserveCDai_$9043",
                                  "typeString": "contract GoodReserveCDai"
                                }
                              ],
                              "id": 8529,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "6468:7:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": "address"
                            },
                            "id": 8531,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "6468:13:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_stringliteral_983b2d560bdd6b422e26073d9516b4646e2f1008810070c0d32b3a79aaa7bfcb",
                              "typeString": "literal_string \"addMinter(address)\""
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 8526,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 22158,
                            "src": "6422:3:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 8527,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encodeWithSignature",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "6422:23:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencodewithsignature_pure$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function (string memory) pure returns (bytes memory)"
                          }
                        },
                        "id": 8532,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "6422:60:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8533,
                        "name": "avatar",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 861,
                        "src": "6496:6:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Avatar_$12705",
                          "typeString": "contract Avatar"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 8534,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "6516:1:26",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_contract$_Avatar_$12705",
                          "typeString": "contract Avatar"
                        },
                        {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 8518,
                        "name": "controller",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1286,
                        "src": "6343:10:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ControllerInterface_$14394",
                          "typeString": "contract ControllerInterface"
                        }
                      },
                      "id": 8520,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "genericCall",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 14271,
                      "src": "6343:22:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_contract$_Avatar_$12705_$_t_uint256_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                        "typeString": "function (address,bytes memory,contract Avatar,uint256) external returns (bool,bytes memory)"
                      }
                    },
                    "id": 8535,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6343:184:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                      "typeString": "tuple(bool,bytes memory)"
                    }
                  },
                  "id": 8536,
                  "nodeType": "ExpressionStatement",
                  "src": "6343:184:26"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 8537,
                        "name": "super",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 22312,
                        "src": "6537:5:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_super$_GoodReserveCDai_$9043",
                          "typeString": "contract super GoodReserveCDai"
                        }
                      },
                      "id": 8539,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "start",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 969,
                      "src": "6537:11:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 8540,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6537:13:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8541,
                  "nodeType": "ExpressionStatement",
                  "src": "6537:13:26"
                }
              ]
            },
            "documentation": "@dev Start function. Adds this contract to identity as a feeless scheme.\nCan only be called if scheme is registered",
            "id": 8543,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 8513,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8512,
                  "name": "onlyRegistered",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1335,
                  "src": "6240:14:26",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "6240:14:26"
              }
            ],
            "name": "start",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8511,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6230:2:26"
            },
            "returnParameters": {
              "id": 8514,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6255:0:26"
            },
            "scope": 9043,
            "src": "6216:341:26",
            "stateMutability": "nonpayable",
            "superFunction": 969,
            "visibility": "public"
          },
          {
            "body": {
              "id": 8556,
              "nodeType": "Block",
              "src": "6761:60:26",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8554,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 8550,
                      "name": "marketMaker",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8358,
                      "src": "6771:11:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_GoodMarketMaker_$8274",
                        "typeString": "contract GoodMarketMaker"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 8552,
                          "name": "_marketMaker",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8545,
                          "src": "6801:12:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 8551,
                        "name": "GoodMarketMaker",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8274,
                        "src": "6785:15:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_GoodMarketMaker_$8274_$",
                          "typeString": "type(contract GoodMarketMaker)"
                        }
                      },
                      "id": 8553,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "6785:29:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_GoodMarketMaker_$8274",
                        "typeString": "contract GoodMarketMaker"
                      }
                    },
                    "src": "6771:43:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_GoodMarketMaker_$8274",
                      "typeString": "contract GoodMarketMaker"
                    }
                  },
                  "id": 8555,
                  "nodeType": "ExpressionStatement",
                  "src": "6771:43:26"
                }
              ]
            },
            "documentation": "@dev Allows the DAO to change the market maker contract\n@param _marketMaker address of the new contract",
            "id": 8557,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 8548,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8547,
                  "name": "onlyAvatar",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1325,
                  "src": "6750:10:26",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "6750:10:26"
              }
            ],
            "name": "setMarketMaker",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8546,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8545,
                  "name": "_marketMaker",
                  "nodeType": "VariableDeclaration",
                  "scope": 8557,
                  "src": "6721:20:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8544,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6721:7:26",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6720:22:26"
            },
            "returnParameters": {
              "id": 8549,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6761:0:26"
            },
            "scope": 9043,
            "src": "6697:124:26",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 8568,
              "nodeType": "Block",
              "src": "7025:43:26",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8566,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 8564,
                      "name": "fundManager",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8360,
                      "src": "7035:11:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 8565,
                      "name": "_fundManager",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8559,
                      "src": "7049:12:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "7035:26:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 8567,
                  "nodeType": "ExpressionStatement",
                  "src": "7035:26:26"
                }
              ]
            },
            "documentation": "@dev Allows the DAO to change the fund manager contract\n@param _fundManager address of the new contract",
            "id": 8569,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 8562,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8561,
                  "name": "onlyAvatar",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1325,
                  "src": "7014:10:26",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "7014:10:26"
              }
            ],
            "name": "setFundManager",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8560,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8559,
                  "name": "_fundManager",
                  "nodeType": "VariableDeclaration",
                  "scope": 8569,
                  "src": "6985:20:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8558,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6985:7:26",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6984:22:26"
            },
            "returnParameters": {
              "id": 8563,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7025:0:26"
            },
            "scope": 9043,
            "src": "6961:107:26",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 8580,
              "nodeType": "Block",
              "src": "7257:47:26",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8578,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 8576,
                      "name": "blockInterval",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8362,
                      "src": "7267:13:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 8577,
                      "name": "_blockInterval",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8571,
                      "src": "7283:14:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "7267:30:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 8579,
                  "nodeType": "ExpressionStatement",
                  "src": "7267:30:26"
                }
              ]
            },
            "documentation": "@dev Allows the DAO to change the block interval\n@param _blockInterval the new value",
            "id": 8581,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 8574,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8573,
                  "name": "onlyAvatar",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1325,
                  "src": "7246:10:26",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "7246:10:26"
              }
            ],
            "name": "setBlockInterval",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8572,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8571,
                  "name": "_blockInterval",
                  "nodeType": "VariableDeclaration",
                  "scope": 8581,
                  "src": "7215:22:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8570,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7215:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7214:24:26"
            },
            "returnParameters": {
              "id": 8575,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7257:0:26"
            },
            "scope": 9043,
            "src": "7189:115:26",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 8607,
              "nodeType": "Block",
              "src": "7539:197:26",
              "statements": [
                {
                  "assignments": [
                    8589
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8589,
                      "name": "prevAddress",
                      "nodeType": "VariableDeclaration",
                      "scope": 8607,
                      "src": "7549:19:26",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 8588,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "7549:7:26",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8593,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8591,
                        "name": "contribution",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8366,
                        "src": "7579:12:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ContributionCalc_$8343",
                          "typeString": "contract ContributionCalc"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_ContributionCalc_$8343",
                          "typeString": "contract ContributionCalc"
                        }
                      ],
                      "id": 8590,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "7571:7:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": "address"
                    },
                    "id": 8592,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7571:21:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7549:43:26"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8598,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 8594,
                      "name": "contribution",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8366,
                      "src": "7602:12:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ContributionCalc_$8343",
                        "typeString": "contract ContributionCalc"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 8596,
                          "name": "_contribution",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8583,
                          "src": "7634:13:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 8595,
                        "name": "ContributionCalc",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8343,
                        "src": "7617:16:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_ContributionCalc_$8343_$",
                          "typeString": "type(contract ContributionCalc)"
                        }
                      },
                      "id": 8597,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "7617:31:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ContributionCalc_$8343",
                        "typeString": "contract ContributionCalc"
                      }
                    },
                    "src": "7602:46:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ContributionCalc_$8343",
                      "typeString": "contract ContributionCalc"
                    }
                  },
                  "id": 8599,
                  "nodeType": "ExpressionStatement",
                  "src": "7602:46:26"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8601,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 22171,
                          "src": "7690:3:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 8602,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "7690:10:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8603,
                        "name": "prevAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8589,
                        "src": "7702:11:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8604,
                        "name": "_contribution",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8583,
                        "src": "7715:13:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 8600,
                      "name": "ContributionAddressUpdated",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8429,
                      "src": "7663:26:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$returns$__$",
                        "typeString": "function (address,address,address)"
                      }
                    },
                    "id": 8605,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7663:66:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8606,
                  "nodeType": "EmitStatement",
                  "src": "7658:71:26"
                }
              ]
            },
            "documentation": "@dev Allows the DAO to change the contribution formula contract\n@param _contribution address of the new contribution contract",
            "id": 8608,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 8586,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8585,
                  "name": "onlyAvatar",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1325,
                  "src": "7528:10:26",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "7528:10:26"
              }
            ],
            "name": "setContributionAddress",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8584,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8583,
                  "name": "_contribution",
                  "nodeType": "VariableDeclaration",
                  "scope": 8608,
                  "src": "7498:21:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8582,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7498:7:26",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7497:23:26"
            },
            "returnParameters": {
              "id": 8587,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7539:0:26"
            },
            "scope": 9043,
            "src": "7466:270:26",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 8694,
              "nodeType": "Block",
              "src": "8573:770:26",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 8634,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 8627,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 22171,
                                "src": "8623:3:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 8628,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "8623:10:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 8630,
                                  "name": "this",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 22311,
                                  "src": "8643:4:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_GoodReserveCDai_$9043",
                                    "typeString": "contract GoodReserveCDai"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_GoodReserveCDai_$9043",
                                    "typeString": "contract GoodReserveCDai"
                                  }
                                ],
                                "id": 8629,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "8635:7:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": "address"
                              },
                              "id": 8631,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "8635:13:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 8625,
                              "name": "_buyWith",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8610,
                              "src": "8604:8:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ERC20_$21849",
                                "typeString": "contract ERC20"
                              }
                            },
                            "id": 8626,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "allowance",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 21474,
                            "src": "8604:18:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$",
                              "typeString": "function (address,address) view external returns (uint256)"
                            }
                          },
                          "id": 8632,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8604:45:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 8633,
                          "name": "_tokenAmount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8612,
                          "src": "8653:12:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "8604:61:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "596f75206e65656420746f20617070726f76652063444149207472616e73666572206669727374",
                        "id": 8635,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "8679:41:26",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_f32a1e6e77966d694bc1ee2f99df81e54285fd4874d9ecb510ee4cf4b43d729e",
                          "typeString": "literal_string \"You need to approve cDAI transfer first\""
                        },
                        "value": "You need to approve cDAI transfer first"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_f32a1e6e77966d694bc1ee2f99df81e54285fd4874d9ecb510ee4cf4b43d729e",
                          "typeString": "literal_string \"You need to approve cDAI transfer first\""
                        }
                      ],
                      "id": 8624,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        22174,
                        22175
                      ],
                      "referencedDeclaration": 22175,
                      "src": "8583:7:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 8636,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8583:147:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8637,
                  "nodeType": "ExpressionStatement",
                  "src": "8583:147:26"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 8649,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 8641,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 22171,
                                "src": "8783:3:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 8642,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "8783:10:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 8644,
                                  "name": "this",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 22311,
                                  "src": "8803:4:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_GoodReserveCDai_$9043",
                                    "typeString": "contract GoodReserveCDai"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_GoodReserveCDai_$9043",
                                    "typeString": "contract GoodReserveCDai"
                                  }
                                ],
                                "id": 8643,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "8795:7:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": "address"
                              },
                              "id": 8645,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "8795:13:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 8646,
                              "name": "_tokenAmount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8612,
                              "src": "8810:12:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 8639,
                              "name": "_buyWith",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8610,
                              "src": "8761:8:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ERC20_$21849",
                                "typeString": "contract ERC20"
                              }
                            },
                            "id": 8640,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "transferFrom",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 21578,
                            "src": "8761:21:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$",
                              "typeString": "function (address,address,uint256) external returns (bool)"
                            }
                          },
                          "id": 8647,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8761:62:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "74727565",
                          "id": 8648,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "8827:4:26",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        },
                        "src": "8761:70:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "7472616e7366657246726f6d206661696c65642c206d616b65207375726520796f7520617070726f7665642063444149207472616e73666572",
                        "id": 8650,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "8845:59:26",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_5f9bc1ecee198826c3960d7d45b75066d789f3149e8f67e92b4f00c4b033fb91",
                          "typeString": "literal_string \"transferFrom failed, make sure you approved cDAI transfer\""
                        },
                        "value": "transferFrom failed, make sure you approved cDAI transfer"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_5f9bc1ecee198826c3960d7d45b75066d789f3149e8f67e92b4f00c4b033fb91",
                          "typeString": "literal_string \"transferFrom failed, make sure you approved cDAI transfer\""
                        }
                      ],
                      "id": 8638,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        22174,
                        22175
                      ],
                      "referencedDeclaration": 22175,
                      "src": "8740:7:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 8651,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8740:174:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8652,
                  "nodeType": "ExpressionStatement",
                  "src": "8740:174:26"
                },
                {
                  "assignments": [
                    8654
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8654,
                      "name": "gdReturn",
                      "nodeType": "VariableDeclaration",
                      "scope": 8694,
                      "src": "8924:16:26",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8653,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "8924:7:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8660,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8657,
                        "name": "_buyWith",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8610,
                        "src": "8959:8:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20_$21849",
                          "typeString": "contract ERC20"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8658,
                        "name": "_tokenAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8612,
                        "src": "8969:12:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_ERC20_$21849",
                          "typeString": "contract ERC20"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 8655,
                        "name": "marketMaker",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8358,
                        "src": "8943:11:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_GoodMarketMaker_$8274",
                          "typeString": "contract GoodMarketMaker"
                        }
                      },
                      "id": 8656,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "buy",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7772,
                      "src": "8943:15:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_contract$_ERC20_$21849_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (contract ERC20,uint256) external returns (uint256)"
                      }
                    },
                    "id": 8659,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8943:39:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "8924:58:26"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 8664,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 8662,
                          "name": "gdReturn",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8654,
                          "src": "9000:8:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 8663,
                          "name": "_minReturn",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8614,
                          "src": "9012:10:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "9000:22:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "47442072657475726e206d7573742062652061626f766520746865206d696e52657475726e",
                        "id": 8665,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "9024:39:26",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_51ea6074161d8e21af50a50b8c4950b1227f8b4bc05f739667a3973904e7b934",
                          "typeString": "literal_string \"GD return must be above the minReturn\""
                        },
                        "value": "GD return must be above the minReturn"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_51ea6074161d8e21af50a50b8c4950b1227f8b4bc05f739667a3973904e7b934",
                          "typeString": "literal_string \"GD return must be above the minReturn\""
                        }
                      ],
                      "id": 8661,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        22174,
                        22175
                      ],
                      "referencedDeclaration": 22175,
                      "src": "8992:7:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 8666,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8992:72:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8667,
                  "nodeType": "ExpressionStatement",
                  "src": "8992:72:26"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8676,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 22171,
                          "src": "9124:3:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 8677,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "9124:10:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8678,
                        "name": "gdReturn",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8654,
                        "src": "9136:8:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 8670,
                                    "name": "avatar",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 861,
                                    "src": "9096:6:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_Avatar_$12705",
                                      "typeString": "contract Avatar"
                                    }
                                  },
                                  "id": 8671,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "nativeToken",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 12441,
                                  "src": "9096:18:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_view$__$returns$_t_contract$_DAOToken_$14470_$",
                                    "typeString": "function () view external returns (contract DAOToken)"
                                  }
                                },
                                "id": 8672,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "9096:20:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_DAOToken_$14470",
                                  "typeString": "contract DAOToken"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_DAOToken_$14470",
                                  "typeString": "contract DAOToken"
                                }
                              ],
                              "id": 8669,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "9088:7:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": "address"
                            },
                            "id": 8673,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "9088:29:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 8668,
                          "name": "ERC20Mintable",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 21966,
                          "src": "9074:13:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_ERC20Mintable_$21966_$",
                            "typeString": "type(contract ERC20Mintable)"
                          }
                        },
                        "id": 8674,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "9074:44:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20Mintable_$21966",
                          "typeString": "contract ERC20Mintable"
                        }
                      },
                      "id": 8675,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mint",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 21965,
                      "src": "9074:49:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                        "typeString": "function (address,uint256) external returns (bool)"
                      }
                    },
                    "id": 8679,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9074:71:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 8680,
                  "nodeType": "ExpressionStatement",
                  "src": "9074:71:26"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8682,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 22171,
                          "src": "9188:3:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 8683,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "9188:10:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 8685,
                            "name": "_buyWith",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8610,
                            "src": "9220:8:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ERC20_$21849",
                              "typeString": "contract ERC20"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_ERC20_$21849",
                              "typeString": "contract ERC20"
                            }
                          ],
                          "id": 8684,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "9212:7:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 8686,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "9212:17:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8687,
                        "name": "_tokenAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8612,
                        "src": "9243:12:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8688,
                        "name": "_minReturn",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8614,
                        "src": "9269:10:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8689,
                        "name": "gdReturn",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8654,
                        "src": "9293:8:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 8681,
                      "name": "TokenPurchased",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8407,
                      "src": "9160:14:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256,uint256,uint256)"
                      }
                    },
                    "id": 8690,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9160:151:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8691,
                  "nodeType": "EmitStatement",
                  "src": "9155:156:26"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8692,
                    "name": "gdReturn",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8654,
                    "src": "9328:8:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 8623,
                  "id": 8693,
                  "nodeType": "Return",
                  "src": "9321:15:26"
                }
              ]
            },
            "documentation": "@dev Converts `buyWith` tokens to GD tokens and updates the bonding curve params.\n`buy` occurs only if the GD return is above the given minimum. It is possible\nto buy only with cDAI and when the contract is set to active. MUST call to\n`buyWith` `approve` prior this action to allow this contract to accomplish the\nconversion.\n@param _buyWith The tokens that should be converted to GD tokens\n@param _tokenAmount The amount of `buyWith` tokens that should be converted to GD tokens\n@param _minReturn The minimum allowed return in GD tokens\n@return (gdReturn) How much GD tokens were transferred",
            "id": 8695,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 8617,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8616,
                  "name": "requireActive",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 882,
                  "src": "8522:13:26",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "8522:13:26"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 8619,
                    "name": "_buyWith",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8610,
                    "src": "8545:8:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$21849",
                      "typeString": "contract ERC20"
                    }
                  }
                ],
                "id": 8620,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8618,
                  "name": "onlyCDai",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 8395,
                  "src": "8536:8:26",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_contract$_ERC20_$21849_$",
                    "typeString": "modifier (contract ERC20)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "8536:18:26"
              }
            ],
            "name": "buy",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8615,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8610,
                  "name": "_buyWith",
                  "nodeType": "VariableDeclaration",
                  "scope": 8695,
                  "src": "8436:14:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ERC20_$21849",
                    "typeString": "contract ERC20"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8609,
                    "name": "ERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21849,
                    "src": "8436:5:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$21849",
                      "typeString": "contract ERC20"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8612,
                  "name": "_tokenAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 8695,
                  "src": "8460:20:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8611,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8460:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8614,
                  "name": "_minReturn",
                  "nodeType": "VariableDeclaration",
                  "scope": 8695,
                  "src": "8490:18:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8613,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8490:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8426:88:26"
            },
            "returnParameters": {
              "id": 8623,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8622,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8695,
                  "src": "8564:7:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8621,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8564:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8563:9:26"
            },
            "scope": 9043,
            "src": "8414:929:26",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 8778,
              "nodeType": "Block",
              "src": "10293:832:26",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8719,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 22171,
                          "src": "10357:3:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 8720,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "10357:10:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8721,
                        "name": "_gdAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8699,
                        "src": "10369:9:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 8713,
                                    "name": "avatar",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 861,
                                    "src": "10325:6:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_Avatar_$12705",
                                      "typeString": "contract Avatar"
                                    }
                                  },
                                  "id": 8714,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "nativeToken",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 12441,
                                  "src": "10325:18:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_view$__$returns$_t_contract$_DAOToken_$14470_$",
                                    "typeString": "function () view external returns (contract DAOToken)"
                                  }
                                },
                                "id": 8715,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "10325:20:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_DAOToken_$14470",
                                  "typeString": "contract DAOToken"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_DAOToken_$14470",
                                  "typeString": "contract DAOToken"
                                }
                              ],
                              "id": 8712,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "10317:7:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": "address"
                            },
                            "id": 8716,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "10317:29:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 8711,
                          "name": "ERC20Burnable",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 21880,
                          "src": "10303:13:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_ERC20Burnable_$21880_$",
                            "typeString": "type(contract ERC20Burnable)"
                          }
                        },
                        "id": 8717,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "10303:44:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20Burnable_$21880",
                          "typeString": "contract ERC20Burnable"
                        }
                      },
                      "id": 8718,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "burnFrom",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 21879,
                      "src": "10303:53:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256) external"
                      }
                    },
                    "id": 8722,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10303:76:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8723,
                  "nodeType": "ExpressionStatement",
                  "src": "10303:76:26"
                },
                {
                  "assignments": [
                    8725
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8725,
                      "name": "contributionAmount",
                      "nodeType": "VariableDeclaration",
                      "scope": 8778,
                      "src": "10389:26:26",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8724,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "10389:7:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8735,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8728,
                        "name": "marketMaker",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8358,
                        "src": "10466:11:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_GoodMarketMaker_$8274",
                          "typeString": "contract GoodMarketMaker"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8729,
                        "name": "this",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 22311,
                        "src": "10491:4:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_GoodReserveCDai_$9043",
                          "typeString": "contract GoodReserveCDai"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8730,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 22171,
                          "src": "10509:3:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 8731,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "10509:10:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8732,
                        "name": "_sellTo",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8697,
                        "src": "10533:7:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20_$21849",
                          "typeString": "contract ERC20"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8733,
                        "name": "_gdAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8699,
                        "src": "10554:9:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_GoodMarketMaker_$8274",
                          "typeString": "contract GoodMarketMaker"
                        },
                        {
                          "typeIdentifier": "t_contract$_GoodReserveCDai_$9043",
                          "typeString": "contract GoodReserveCDai"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_contract$_ERC20_$21849",
                          "typeString": "contract ERC20"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 8726,
                        "name": "contribution",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8366,
                        "src": "10418:12:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ContributionCalc_$8343",
                          "typeString": "contract ContributionCalc"
                        }
                      },
                      "id": 8727,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "calculateContribution",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 8342,
                      "src": "10418:34:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_contract$_GoodMarketMaker_$8274_$_t_contract$_GoodReserveCDai_$9043_$_t_address_$_t_contract$_ERC20_$21849_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (contract GoodMarketMaker,contract GoodReserveCDai,address,contract ERC20,uint256) view external returns (uint256)"
                      }
                    },
                    "id": 8734,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10418:155:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "10389:184:26"
                },
                {
                  "assignments": [
                    8737
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8737,
                      "name": "tokenReturn",
                      "nodeType": "VariableDeclaration",
                      "scope": 8778,
                      "src": "10583:19:26",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8736,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "10583:7:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8744,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8740,
                        "name": "_sellTo",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8697,
                        "src": "10651:7:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20_$21849",
                          "typeString": "contract ERC20"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8741,
                        "name": "_gdAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8699,
                        "src": "10672:9:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8742,
                        "name": "contributionAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8725,
                        "src": "10695:18:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_ERC20_$21849",
                          "typeString": "contract ERC20"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 8738,
                        "name": "marketMaker",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8358,
                        "src": "10605:11:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_GoodMarketMaker_$8274",
                          "typeString": "contract GoodMarketMaker"
                        }
                      },
                      "id": 8739,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sellWithContribution",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7936,
                      "src": "10605:32:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_contract$_ERC20_$21849_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (contract ERC20,uint256,uint256) external returns (uint256)"
                      }
                    },
                    "id": 8743,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10605:118:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "10583:140:26"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 8748,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 8746,
                          "name": "tokenReturn",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8737,
                          "src": "10741:11:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 8747,
                          "name": "_minReturn",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8701,
                          "src": "10756:10:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "10741:25:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "546f6b656e2072657475726e206d7573742062652061626f766520746865206d696e52657475726e",
                        "id": 8749,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "10768:42:26",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_9c6d7b666310065639eb0b875a52ad6dddfa6ae7e04927e0ed9bf030b6c97eb5",
                          "typeString": "literal_string \"Token return must be above the minReturn\""
                        },
                        "value": "Token return must be above the minReturn"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_9c6d7b666310065639eb0b875a52ad6dddfa6ae7e04927e0ed9bf030b6c97eb5",
                          "typeString": "literal_string \"Token return must be above the minReturn\""
                        }
                      ],
                      "id": 8745,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        22174,
                        22175
                      ],
                      "referencedDeclaration": 22175,
                      "src": "10733:7:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 8750,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10733:78:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8751,
                  "nodeType": "ExpressionStatement",
                  "src": "10733:78:26"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 8760,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 8755,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 22171,
                                "src": "10846:3:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 8756,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "10846:10:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 8757,
                              "name": "tokenReturn",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8737,
                              "src": "10858:11:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 8753,
                              "name": "_sellTo",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8697,
                              "src": "10829:7:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ERC20_$21849",
                                "typeString": "contract ERC20"
                              }
                            },
                            "id": 8754,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "transfer",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 21493,
                            "src": "10829:16:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                              "typeString": "function (address,uint256) external returns (bool)"
                            }
                          },
                          "id": 8758,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "10829:41:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "74727565",
                          "id": 8759,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "10874:4:26",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        },
                        "src": "10829:49:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "5472616e73666572206661696c6564",
                        "id": 8761,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "10880:17:26",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_25adaa6d082ce15f901e0d8a3d393e7462ef9edf2e6bc8321fa14d1615b6fc51",
                          "typeString": "literal_string \"Transfer failed\""
                        },
                        "value": "Transfer failed"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_25adaa6d082ce15f901e0d8a3d393e7462ef9edf2e6bc8321fa14d1615b6fc51",
                          "typeString": "literal_string \"Transfer failed\""
                        }
                      ],
                      "id": 8752,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        22174,
                        22175
                      ],
                      "referencedDeclaration": 22175,
                      "src": "10821:7:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 8762,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10821:77:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8763,
                  "nodeType": "ExpressionStatement",
                  "src": "10821:77:26"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8765,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 22171,
                          "src": "10936:3:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 8766,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "10936:10:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 8768,
                            "name": "_sellTo",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8697,
                            "src": "10968:7:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ERC20_$21849",
                              "typeString": "contract ERC20"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_ERC20_$21849",
                              "typeString": "contract ERC20"
                            }
                          ],
                          "id": 8767,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "10960:7:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 8769,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "10960:16:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8770,
                        "name": "_gdAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8699,
                        "src": "10990:9:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8771,
                        "name": "contributionAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8725,
                        "src": "11013:18:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8772,
                        "name": "_minReturn",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8701,
                        "src": "11045:10:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8773,
                        "name": "tokenReturn",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8737,
                        "src": "11069:11:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 8764,
                      "name": "TokenSold",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8421,
                      "src": "10913:9:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256,uint256,uint256,uint256)"
                      }
                    },
                    "id": 8774,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10913:177:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8775,
                  "nodeType": "EmitStatement",
                  "src": "10908:182:26"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8776,
                    "name": "tokenReturn",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8737,
                    "src": "11107:11:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 8710,
                  "id": 8777,
                  "nodeType": "Return",
                  "src": "11100:18:26"
                }
              ]
            },
            "documentation": "@dev Converts GD tokens to `sellTo` tokens and update the bonding curve params.\n`sell` occurs only if the token return is above the given minimum. Notice that\nthere is a contribution amount from the given GD that remains in the reserve.\nIt is only possible to sell to cDAI and only when the contract is set to\nactive. MUST be called to G$ `approve` prior to this action to allow this\ncontract to accomplish the conversion.\n@param _sellTo The tokens that will be received after the conversion\n@param _gdAmount The amount of GD tokens that should be converted to `_sellTo` tokens\n@param _minReturn The minimum allowed `sellTo` tokens return\n@return (tokenReturn) How much `sellTo` tokens were transferred",
            "id": 8779,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 8704,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8703,
                  "name": "requireActive",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 882,
                  "src": "10243:13:26",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "10243:13:26"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 8706,
                    "name": "_sellTo",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8697,
                    "src": "10266:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$21849",
                      "typeString": "contract ERC20"
                    }
                  }
                ],
                "id": 8707,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8705,
                  "name": "onlyCDai",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 8395,
                  "src": "10257:8:26",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_contract$_ERC20_$21849_$",
                    "typeString": "modifier (contract ERC20)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "10257:17:26"
              }
            ],
            "name": "sell",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8702,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8697,
                  "name": "_sellTo",
                  "nodeType": "VariableDeclaration",
                  "scope": 8779,
                  "src": "10161:13:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ERC20_$21849",
                    "typeString": "contract ERC20"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8696,
                    "name": "ERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21849,
                    "src": "10161:5:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$21849",
                      "typeString": "contract ERC20"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8699,
                  "name": "_gdAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 8779,
                  "src": "10184:17:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8698,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "10184:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8701,
                  "name": "_minReturn",
                  "nodeType": "VariableDeclaration",
                  "scope": 8779,
                  "src": "10211:18:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8700,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "10211:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10151:84:26"
            },
            "returnParameters": {
              "id": 8710,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8709,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8779,
                  "src": "10284:7:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8708,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "10284:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10283:9:26"
            },
            "scope": 9043,
            "src": "10138:987:26",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 8791,
              "nodeType": "Block",
              "src": "11373:56:26",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8788,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8781,
                        "src": "11415:6:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20_$21849",
                          "typeString": "contract ERC20"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_ERC20_$21849",
                          "typeString": "contract ERC20"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 8786,
                        "name": "marketMaker",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8358,
                        "src": "11390:11:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_GoodMarketMaker_$8274",
                          "typeString": "contract GoodMarketMaker"
                        }
                      },
                      "id": 8787,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "currentPrice",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7982,
                      "src": "11390:24:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_contract$_ERC20_$21849_$returns$_t_uint256_$",
                        "typeString": "function (contract ERC20) view external returns (uint256)"
                      }
                    },
                    "id": 8789,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11390:32:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 8785,
                  "id": 8790,
                  "nodeType": "Return",
                  "src": "11383:39:26"
                }
              ]
            },
            "documentation": "@dev Current price of GD in `token`. currently only cDAI is supported.\n@param _token The desired reserve token to have\n@return price of GD",
            "id": 8792,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "currentPrice",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8782,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8781,
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 8792,
                  "src": "11329:12:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ERC20_$21849",
                    "typeString": "contract ERC20"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8780,
                    "name": "ERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21849,
                    "src": "11329:5:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$21849",
                      "typeString": "contract ERC20"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11328:14:26"
            },
            "returnParameters": {
              "id": 8785,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8784,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8792,
                  "src": "11364:7:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8783,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "11364:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11363:9:26"
            },
            "scope": 9043,
            "src": "11307:122:26",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 8805,
              "nodeType": "Block",
              "src": "11707:68:26",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 8803,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 8800,
                          "name": "blockInterval",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8362,
                          "src": "11741:13:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 8797,
                            "name": "block",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 22161,
                            "src": "11724:5:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_block",
                              "typeString": "block"
                            }
                          },
                          "id": 8798,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "number",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "11724:12:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 8799,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "div",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 21239,
                        "src": "11724:16:26",
                        "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": 8801,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "11724:31:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 8802,
                      "name": "lastMinted",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8364,
                      "src": "11758:10:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "11724:44:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 8796,
                  "id": 8804,
                  "nodeType": "Return",
                  "src": "11717:51:26"
                }
              ]
            },
            "documentation": "@dev Checks if enough blocks have passed so it would be possible to\nexecute `mintInterestAndUBI` according to the length of `blockInterval`\n@return (bool) True if enough blocks have passed",
            "id": 8806,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "canMint",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8793,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "11677:2:26"
            },
            "returnParameters": {
              "id": 8796,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8795,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8806,
                  "src": "11701:4:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 8794,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "11701:4:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11700:6:26"
            },
            "scope": 9043,
            "src": "11661:114:26",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 8945,
              "nodeType": "Block",
              "src": "12611:1074:26",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 8827,
                          "name": "canMint",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8806,
                          "src": "12629:7:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_bool_$",
                            "typeString": "function () view returns (bool)"
                          }
                        },
                        "id": 8828,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "12629:9:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4e65656420746f207761697420666f7220746865206e65787420696e74657276616c",
                        "id": 8829,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "12640:36:26",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_b2926b938aae9e3d3391834a8a3f967955ec6bac9d9b401e186c29404478d446",
                          "typeString": "literal_string \"Need to wait for the next interval\""
                        },
                        "value": "Need to wait for the next interval"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_b2926b938aae9e3d3391834a8a3f967955ec6bac9d9b401e186c29404478d446",
                          "typeString": "literal_string \"Need to wait for the next interval\""
                        }
                      ],
                      "id": 8826,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        22174,
                        22175
                      ],
                      "referencedDeclaration": 22175,
                      "src": "12621:7:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 8830,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12621:56:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8831,
                  "nodeType": "ExpressionStatement",
                  "src": "12621:56:26"
                },
                {
                  "assignments": [
                    8833
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8833,
                      "name": "price",
                      "nodeType": "VariableDeclaration",
                      "scope": 8945,
                      "src": "12687:13:26",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8832,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "12687:7:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8837,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8835,
                        "name": "_interestToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8808,
                        "src": "12716:14:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20_$21849",
                          "typeString": "contract ERC20"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_ERC20_$21849",
                          "typeString": "contract ERC20"
                        }
                      ],
                      "id": 8834,
                      "name": "currentPrice",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8792,
                      "src": "12703:12:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_contract$_ERC20_$21849_$returns$_t_uint256_$",
                        "typeString": "function (contract ERC20) view returns (uint256)"
                      }
                    },
                    "id": 8836,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12703:28:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "12687:44:26"
                },
                {
                  "assignments": [
                    8839
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8839,
                      "name": "gdInterestToMint",
                      "nodeType": "VariableDeclaration",
                      "scope": 8945,
                      "src": "12741:24:26",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8838,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "12741:7:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8845,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8842,
                        "name": "_interestToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8808,
                        "src": "12793:14:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20_$21849",
                          "typeString": "contract ERC20"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8843,
                        "name": "_transfered",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8810,
                        "src": "12809:11:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_ERC20_$21849",
                          "typeString": "contract ERC20"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 8840,
                        "name": "marketMaker",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8358,
                        "src": "12768:11:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_GoodMarketMaker_$8274",
                          "typeString": "contract GoodMarketMaker"
                        }
                      },
                      "id": 8841,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mintInterest",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 8105,
                      "src": "12768:24:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_contract$_ERC20_$21849_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (contract ERC20,uint256) external returns (uint256)"
                      }
                    },
                    "id": 8844,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12768:53:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "12741:80:26"
                },
                {
                  "assignments": [
                    8847
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8847,
                      "name": "gooddollar",
                      "nodeType": "VariableDeclaration",
                      "scope": 8945,
                      "src": "12831:21:26",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_GoodDollar_$3767",
                        "typeString": "contract GoodDollar"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 8846,
                        "name": "GoodDollar",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 3767,
                        "src": "12831:10:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_GoodDollar_$3767",
                          "typeString": "contract GoodDollar"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8855,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "expression": {
                                "argumentTypes": null,
                                "id": 8850,
                                "name": "avatar",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 861,
                                "src": "12874:6:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_Avatar_$12705",
                                  "typeString": "contract Avatar"
                                }
                              },
                              "id": 8851,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "nativeToken",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 12441,
                              "src": "12874:18:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_view$__$returns$_t_contract$_DAOToken_$14470_$",
                                "typeString": "function () view external returns (contract DAOToken)"
                              }
                            },
                            "id": 8852,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "12874:20:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_DAOToken_$14470",
                              "typeString": "contract DAOToken"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_DAOToken_$14470",
                              "typeString": "contract DAOToken"
                            }
                          ],
                          "id": 8849,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "12866:7:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 8853,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "12866:29:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 8848,
                      "name": "GoodDollar",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3767,
                      "src": "12855:10:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_GoodDollar_$3767_$",
                        "typeString": "type(contract GoodDollar)"
                      }
                    },
                    "id": 8854,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12855:41:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_GoodDollar_$3767",
                      "typeString": "contract GoodDollar"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "12831:65:26"
                },
                {
                  "assignments": [
                    8857
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8857,
                      "name": "precisionLoss",
                      "nodeType": "VariableDeclaration",
                      "scope": 8945,
                      "src": "12906:21:26",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8856,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "12906:7:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8868,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "expression": {
                                "argumentTypes": null,
                                "id": 8863,
                                "name": "gooddollar",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8847,
                                "src": "12954:10:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_GoodDollar_$3767",
                                  "typeString": "contract GoodDollar"
                                }
                              },
                              "id": 8864,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "decimals",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 3397,
                              "src": "12954:19:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$",
                                "typeString": "function () view external returns (uint256)"
                              }
                            },
                            "id": 8865,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "12954:21:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 8862,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "12946:7:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint256_$",
                            "typeString": "type(uint256)"
                          },
                          "typeName": "uint256"
                        },
                        "id": 8866,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "12946:30:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "3237",
                            "id": 8859,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "12938:2:26",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_27_by_1",
                              "typeString": "int_const 27"
                            },
                            "value": "27"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_27_by_1",
                              "typeString": "int_const 27"
                            }
                          ],
                          "id": 8858,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "12930:7:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint256_$",
                            "typeString": "type(uint256)"
                          },
                          "typeName": "uint256"
                        },
                        "id": 8860,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "12930:11:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 8861,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sub",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 21263,
                      "src": "12930:15:26",
                      "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": 8867,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12930:47:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "12906:71:26"
                },
                {
                  "assignments": [
                    8870
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8870,
                      "name": "gdInterest",
                      "nodeType": "VariableDeclaration",
                      "scope": 8945,
                      "src": "12987:18:26",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8869,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "12987:7:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8880,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 8878,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "hexValue": "3130",
                          "id": 8876,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "13035:2:26",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_10_by_1",
                            "typeString": "int_const 10"
                          },
                          "value": "10"
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "**",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 8877,
                          "name": "precisionLoss",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8857,
                          "src": "13039:13:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "13035:17:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 8872,
                            "name": "_interest",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8812,
                            "src": "13013:9:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 8873,
                            "name": "price",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8833,
                            "src": "13024:5:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 8871,
                          "name": "rdiv",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 247,
                          "src": "13008:4:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                            "typeString": "function (uint256,uint256) pure returns (uint256)"
                          }
                        },
                        "id": 8874,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "13008:22:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 8875,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "div",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 21239,
                      "src": "13008:26:26",
                      "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": 8879,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13008:45:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "12987:66:26"
                },
                {
                  "assignments": [
                    8882
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8882,
                      "name": "gdExpansionToMint",
                      "nodeType": "VariableDeclaration",
                      "scope": 8945,
                      "src": "13063:25:26",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8881,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "13063:7:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8887,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8885,
                        "name": "_interestToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8808,
                        "src": "13117:14:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20_$21849",
                          "typeString": "contract ERC20"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_ERC20_$21849",
                          "typeString": "contract ERC20"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 8883,
                        "name": "marketMaker",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8358,
                        "src": "13091:11:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_GoodMarketMaker_$8274",
                          "typeString": "contract GoodMarketMaker"
                        }
                      },
                      "id": 8884,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mintExpansion",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 8273,
                      "src": "13091:25:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_contract$_ERC20_$21849_$returns$_t_uint256_$",
                        "typeString": "function (contract ERC20) external returns (uint256)"
                      }
                    },
                    "id": 8886,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13091:41:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "13063:69:26"
                },
                {
                  "assignments": [
                    8889
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8889,
                      "name": "gdUBI",
                      "nodeType": "VariableDeclaration",
                      "scope": 8945,
                      "src": "13142:13:26",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8888,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "13142:7:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8894,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8892,
                        "name": "gdInterest",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8870,
                        "src": "13179:10:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 8890,
                        "name": "gdInterestToMint",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8839,
                        "src": "13158:16:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 8891,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sub",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 21263,
                      "src": "13158:20:26",
                      "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": 8893,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13158:32:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "13142:48:26"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8900,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 8895,
                      "name": "gdUBI",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8889,
                      "src": "13200:5:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 8898,
                          "name": "gdExpansionToMint",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8882,
                          "src": "13218:17:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 8896,
                          "name": "gdUBI",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8889,
                          "src": "13208:5:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 8897,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "add",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 21287,
                        "src": "13208:9:26",
                        "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": 8899,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "13208:28:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "13200:36:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 8901,
                  "nodeType": "ExpressionStatement",
                  "src": "13200:36:26"
                },
                {
                  "assignments": [
                    8903
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8903,
                      "name": "toMint",
                      "nodeType": "VariableDeclaration",
                      "scope": 8945,
                      "src": "13246:14:26",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8902,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "13246:7:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8908,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8906,
                        "name": "gdInterest",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8870,
                        "src": "13273:10:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 8904,
                        "name": "gdUBI",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8889,
                        "src": "13263:5:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 8905,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "add",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 21287,
                      "src": "13263:9:26",
                      "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": 8907,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13263:21:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "13246:38:26"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8917,
                        "name": "fundManager",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8360,
                        "src": "13344:11:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8918,
                        "name": "toMint",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8903,
                        "src": "13357:6:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 8911,
                                    "name": "avatar",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 861,
                                    "src": "13316:6:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_Avatar_$12705",
                                      "typeString": "contract Avatar"
                                    }
                                  },
                                  "id": 8912,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "nativeToken",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 12441,
                                  "src": "13316:18:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_view$__$returns$_t_contract$_DAOToken_$14470_$",
                                    "typeString": "function () view external returns (contract DAOToken)"
                                  }
                                },
                                "id": 8913,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "13316:20:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_DAOToken_$14470",
                                  "typeString": "contract DAOToken"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_DAOToken_$14470",
                                  "typeString": "contract DAOToken"
                                }
                              ],
                              "id": 8910,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "13308:7:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": "address"
                            },
                            "id": 8914,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "13308:29:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 8909,
                          "name": "ERC20Mintable",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 21966,
                          "src": "13294:13:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_ERC20Mintable_$21966_$",
                            "typeString": "type(contract ERC20Mintable)"
                          }
                        },
                        "id": 8915,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "13294:44:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20Mintable_$21966",
                          "typeString": "contract ERC20Mintable"
                        }
                      },
                      "id": 8916,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mint",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 21965,
                      "src": "13294:49:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                        "typeString": "function (address,uint256) external returns (bool)"
                      }
                    },
                    "id": 8919,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13294:70:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 8920,
                  "nodeType": "ExpressionStatement",
                  "src": "13294:70:26"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8927,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 8921,
                      "name": "lastMinted",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8364,
                      "src": "13374:10:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 8925,
                          "name": "blockInterval",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8362,
                          "src": "13404:13:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 8922,
                            "name": "block",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 22161,
                            "src": "13387:5:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_block",
                              "typeString": "block"
                            }
                          },
                          "id": 8923,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "number",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "13387:12:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 8924,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "div",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 21239,
                        "src": "13387:16:26",
                        "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": 8926,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "13387:31:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "13374:44:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 8928,
                  "nodeType": "ExpressionStatement",
                  "src": "13374:44:26"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8930,
                        "name": "lastMinted",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8364,
                        "src": "13456:10:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 8932,
                            "name": "_interestToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8808,
                            "src": "13488:14:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ERC20_$21849",
                              "typeString": "contract ERC20"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_ERC20_$21849",
                              "typeString": "contract ERC20"
                            }
                          ],
                          "id": 8931,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "13480:7:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 8933,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "13480:23:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8934,
                        "name": "_transfered",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8810,
                        "src": "13517:11:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8935,
                        "name": "gdInterestToMint",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8839,
                        "src": "13542:16:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8936,
                        "name": "gdExpansionToMint",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8882,
                        "src": "13572:17:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8937,
                        "name": "gdInterest",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8870,
                        "src": "13603:10:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8938,
                        "name": "gdUBI",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8889,
                        "src": "13627:5:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 8929,
                      "name": "UBIMinted",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8445,
                      "src": "13433:9:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (uint256,address,uint256,uint256,uint256,uint256,uint256)"
                      }
                    },
                    "id": 8939,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13433:209:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8940,
                  "nodeType": "EmitStatement",
                  "src": "13428:214:26"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "components": [
                      {
                        "argumentTypes": null,
                        "id": 8941,
                        "name": "gdInterest",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8870,
                        "src": "13660:10:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8942,
                        "name": "gdUBI",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8889,
                        "src": "13672:5:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "id": 8943,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "13659:19:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                      "typeString": "tuple(uint256,uint256)"
                    }
                  },
                  "functionReturnParameters": 8825,
                  "id": 8944,
                  "nodeType": "Return",
                  "src": "13652:26:26"
                }
              ]
            },
            "documentation": "@dev Anyone can call this to trigger calculations.\nReserve sends UBI to Avatar DAO and returns interest to FundManager.\n@param _interestToken The token that was transfered to the reserve\n@param _transfered How much was transfered to the reserve for UBI in `_interestToken`\n@param _interest Out of total transfered how much is the interest (in `_interestToken`)\nthat needs to be paid back (some interest might be donated)\n@return (gdInterest, gdUBI) How much GD interest was minted and how much GD UBI was minted",
            "id": 8946,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 8815,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8814,
                  "name": "requireActive",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 882,
                  "src": "12501:13:26",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "12501:13:26"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 8817,
                    "name": "_interestToken",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8808,
                    "src": "12532:14:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$21849",
                      "typeString": "contract ERC20"
                    }
                  }
                ],
                "id": 8818,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8816,
                  "name": "onlyCDai",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 8395,
                  "src": "12523:8:26",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_contract$_ERC20_$21849_$",
                    "typeString": "modifier (contract ERC20)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "12523:24:26"
              },
              {
                "arguments": null,
                "id": 8820,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8819,
                  "name": "onlyFundManager",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 8378,
                  "src": "12556:15:26",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "12556:15:26"
              }
            ],
            "name": "mintInterestAndUBI",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8813,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8808,
                  "name": "_interestToken",
                  "nodeType": "VariableDeclaration",
                  "scope": 8946,
                  "src": "12395:20:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ERC20_$21849",
                    "typeString": "contract ERC20"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8807,
                    "name": "ERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21849,
                    "src": "12395:5:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$21849",
                      "typeString": "contract ERC20"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8810,
                  "name": "_transfered",
                  "nodeType": "VariableDeclaration",
                  "scope": 8946,
                  "src": "12425:19:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8809,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "12425:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8812,
                  "name": "_interest",
                  "nodeType": "VariableDeclaration",
                  "scope": 8946,
                  "src": "12454:17:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8811,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "12454:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12385:92:26"
            },
            "returnParameters": {
              "id": 8825,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8822,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8946,
                  "src": "12589:7:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8821,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "12589:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8824,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8946,
                  "src": "12598:7:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8823,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "12598:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12588:18:26"
            },
            "scope": 9043,
            "src": "12358:1327:26",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 9017,
              "nodeType": "Block",
              "src": "14043:610:26",
              "statements": [
                {
                  "assignments": [
                    8952
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8952,
                      "name": "remainingReserve",
                      "nodeType": "VariableDeclaration",
                      "scope": 9017,
                      "src": "14118:24:26",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8951,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "14118:7:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8959,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 8956,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 22311,
                            "src": "14168:4:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_GoodReserveCDai_$9043",
                              "typeString": "contract GoodReserveCDai"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_GoodReserveCDai_$9043",
                              "typeString": "contract GoodReserveCDai"
                            }
                          ],
                          "id": 8955,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "14160:7:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 8957,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "14160:13:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 8953,
                        "name": "cDai",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8356,
                        "src": "14145:4:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_cERC20_$8327",
                          "typeString": "contract cERC20"
                        }
                      },
                      "id": 8954,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "balanceOf",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 8317,
                      "src": "14145:14:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                        "typeString": "function (address) view external returns (uint256)"
                      }
                    },
                    "id": 8958,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14145:29:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "14118:56:26"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 8962,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 8960,
                      "name": "remainingReserve",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8952,
                      "src": "14188:16:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 8961,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "14207:1:26",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "14188:20:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 8975,
                  "nodeType": "IfStatement",
                  "src": "14184:178:26",
                  "trueBody": {
                    "id": 8974,
                    "nodeType": "Block",
                    "src": "14210:152:26",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 8967,
                                      "name": "avatar",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 861,
                                      "src": "14271:6:26",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_Avatar_$12705",
                                        "typeString": "contract Avatar"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_contract$_Avatar_$12705",
                                        "typeString": "contract Avatar"
                                      }
                                    ],
                                    "id": 8966,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "14263:7:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_address_$",
                                      "typeString": "type(address)"
                                    },
                                    "typeName": "address"
                                  },
                                  "id": 8968,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "14263:15:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address_payable",
                                    "typeString": "address payable"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 8969,
                                  "name": "remainingReserve",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8952,
                                  "src": "14280:16:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address_payable",
                                    "typeString": "address payable"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 8964,
                                  "name": "cDai",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8356,
                                  "src": "14249:4:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_cERC20_$8327",
                                    "typeString": "contract cERC20"
                                  }
                                },
                                "id": 8965,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "transfer",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 8326,
                                "src": "14249:13:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                                  "typeString": "function (address,uint256) external returns (bool)"
                                }
                              },
                              "id": 8970,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "14249:48:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "63646169207472616e73666572206661696c6564",
                              "id": 8971,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "14315:22:26",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_ee6fcf4e0c6a3f3ba08a53c912b0652776da731b8ba529f52dfcb696ea92b55b",
                                "typeString": "literal_string \"cdai transfer failed\""
                              },
                              "value": "cdai transfer failed"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_ee6fcf4e0c6a3f3ba08a53c912b0652776da731b8ba529f52dfcb696ea92b55b",
                                "typeString": "literal_string \"cdai transfer failed\""
                              }
                            ],
                            "id": 8963,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              22174,
                              22175
                            ],
                            "referencedDeclaration": 22175,
                            "src": "14224:7:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 8972,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "14224:127:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 8973,
                        "nodeType": "ExpressionStatement",
                        "src": "14224:127:26"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 8984,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 8980,
                                  "name": "this",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 22311,
                                  "src": "14402:4:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_GoodReserveCDai_$9043",
                                    "typeString": "contract GoodReserveCDai"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_GoodReserveCDai_$9043",
                                    "typeString": "contract GoodReserveCDai"
                                  }
                                ],
                                "id": 8979,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "14394:7:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": "address"
                              },
                              "id": 8981,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "14394:13:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 8977,
                              "name": "cDai",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8356,
                              "src": "14379:4:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_cERC20_$8327",
                                "typeString": "contract cERC20"
                              }
                            },
                            "id": 8978,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "balanceOf",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 8317,
                            "src": "14379:14:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                              "typeString": "function (address) view external returns (uint256)"
                            }
                          },
                          "id": 8982,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "14379:29:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 8983,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "14412:1:26",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "14379:34:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "46756e6473207472616e7366657220686173206661696c6564",
                        "id": 8985,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "14415:27:26",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_3c43d2089fde162746b7f79ca82a944c5d81589be0a9addf7c07e40869d26592",
                          "typeString": "literal_string \"Funds transfer has failed\""
                        },
                        "value": "Funds transfer has failed"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_3c43d2089fde162746b7f79ca82a944c5d81589be0a9addf7c07e40869d26592",
                          "typeString": "literal_string \"Funds transfer has failed\""
                        }
                      ],
                      "id": 8976,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        22174,
                        22175
                      ],
                      "referencedDeclaration": 22175,
                      "src": "14371:7:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 8986,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14371:72:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8987,
                  "nodeType": "ExpressionStatement",
                  "src": "14371:72:26"
                },
                {
                  "assignments": [
                    8989
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8989,
                      "name": "gooddollar",
                      "nodeType": "VariableDeclaration",
                      "scope": 9017,
                      "src": "14453:21:26",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_GoodDollar_$3767",
                        "typeString": "contract GoodDollar"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 8988,
                        "name": "GoodDollar",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 3767,
                        "src": "14453:10:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_GoodDollar_$3767",
                          "typeString": "contract GoodDollar"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8997,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "expression": {
                                "argumentTypes": null,
                                "id": 8992,
                                "name": "avatar",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 861,
                                "src": "14496:6:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_Avatar_$12705",
                                  "typeString": "contract Avatar"
                                }
                              },
                              "id": 8993,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "nativeToken",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 12441,
                              "src": "14496:18:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_view$__$returns$_t_contract$_DAOToken_$14470_$",
                                "typeString": "function () view external returns (contract DAOToken)"
                              }
                            },
                            "id": 8994,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "14496:20:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_DAOToken_$14470",
                              "typeString": "contract DAOToken"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_DAOToken_$14470",
                              "typeString": "contract DAOToken"
                            }
                          ],
                          "id": 8991,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "14488:7:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 8995,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "14488:29:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 8990,
                      "name": "GoodDollar",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3767,
                      "src": "14477:10:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_GoodDollar_$3767_$",
                        "typeString": "type(contract GoodDollar)"
                      }
                    },
                    "id": 8996,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14477:41:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_GoodDollar_$3767",
                      "typeString": "contract GoodDollar"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "14453:65:26"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 9002,
                            "name": "avatar",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 861,
                            "src": "14566:6:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_Avatar_$12705",
                              "typeString": "contract Avatar"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_Avatar_$12705",
                              "typeString": "contract Avatar"
                            }
                          ],
                          "id": 9001,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "14558:7:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 9003,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "14558:15:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 8998,
                        "name": "marketMaker",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8358,
                        "src": "14528:11:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_GoodMarketMaker_$8274",
                          "typeString": "contract GoodMarketMaker"
                        }
                      },
                      "id": 9000,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "transferOwnership",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 21393,
                      "src": "14528:29:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address) external"
                      }
                    },
                    "id": 9004,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14528:46:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9005,
                  "nodeType": "ExpressionStatement",
                  "src": "14528:46:26"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 9006,
                        "name": "gooddollar",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8989,
                        "src": "14584:10:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_GoodDollar_$3767",
                          "typeString": "contract GoodDollar"
                        }
                      },
                      "id": 9008,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "renounceMinter",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 20811,
                      "src": "14584:25:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$__$returns$__$",
                        "typeString": "function () external"
                      }
                    },
                    "id": 9009,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14584:27:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9010,
                  "nodeType": "ExpressionStatement",
                  "src": "14584:27:26"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 9014,
                        "name": "avatar",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 861,
                        "src": "14639:6:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Avatar_$12705",
                          "typeString": "contract Avatar"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_Avatar_$12705",
                          "typeString": "contract Avatar"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 9011,
                        "name": "super",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 22312,
                        "src": "14621:5:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_super$_GoodReserveCDai_$9043",
                          "typeString": "contract super GoodReserveCDai"
                        }
                      },
                      "id": 9013,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "internalEnd",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1003,
                      "src": "14621:17:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_Avatar_$12705_$returns$__$",
                        "typeString": "function (contract Avatar)"
                      }
                    },
                    "id": 9015,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14621:25:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9016,
                  "nodeType": "ExpressionStatement",
                  "src": "14621:25:26"
                }
              ]
            },
            "documentation": "@dev Making the contract inactive after it has transferred the cDAI funds to `_avatar`\nand has transferred the market maker ownership to `_avatar`. Inactive means that\nbuy / sell / mintInterestAndUBI actions will no longer be active. Only the Avatar can\nexecutes this method",
            "id": 9018,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 8949,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8948,
                  "name": "onlyAvatar",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1325,
                  "src": "14032:10:26",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "14032:10:26"
              }
            ],
            "name": "end",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8947,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "14022:2:26"
            },
            "returnParameters": {
              "id": 8950,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "14043:0:26"
            },
            "scope": 9043,
            "src": "14010:643:26",
            "stateMutability": "nonpayable",
            "superFunction": 979,
            "visibility": "public"
          },
          {
            "body": {
              "id": 9041,
              "nodeType": "Block",
              "src": "14844:152:26",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 9029,
                                "name": "avatar",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 861,
                                "src": "14899:6:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_Avatar_$12705",
                                  "typeString": "contract Avatar"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_Avatar_$12705",
                                  "typeString": "contract Avatar"
                                }
                              ],
                              "id": 9028,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "14891:7:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": "address"
                            },
                            "id": 9030,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "14891:15:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 9034,
                                    "name": "this",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 22311,
                                    "src": "14933:4:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_GoodReserveCDai_$9043",
                                      "typeString": "contract GoodReserveCDai"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_contract$_GoodReserveCDai_$9043",
                                      "typeString": "contract GoodReserveCDai"
                                    }
                                  ],
                                  "id": 9033,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "14925:7:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_address_$",
                                    "typeString": "type(address)"
                                  },
                                  "typeName": "address"
                                },
                                "id": 9035,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "14925:13:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 9031,
                                "name": "_token",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9020,
                                "src": "14908:6:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_ERC20_$21849",
                                  "typeString": "contract ERC20"
                                }
                              },
                              "id": 9032,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "balanceOf",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 21458,
                              "src": "14908:16:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                                "typeString": "function (address) view external returns (uint256)"
                              }
                            },
                            "id": 9036,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "14908:31:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 9026,
                            "name": "_token",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9020,
                            "src": "14875:6:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ERC20_$21849",
                              "typeString": "contract ERC20"
                            }
                          },
                          "id": 9027,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "transfer",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 21493,
                          "src": "14875:15:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                            "typeString": "function (address,uint256) external returns (bool)"
                          }
                        },
                        "id": 9037,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "14875:65:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "7265636f766572207472616e73666572206661696c6564",
                        "id": 9038,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "14954:25:26",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_41a03013a5674cc54e9badb52c47e3c4670bc54fa0765e5276b5118633f8aeb3",
                          "typeString": "literal_string \"recover transfer failed\""
                        },
                        "value": "recover transfer failed"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_41a03013a5674cc54e9badb52c47e3c4670bc54fa0765e5276b5118633f8aeb3",
                          "typeString": "literal_string \"recover transfer failed\""
                        }
                      ],
                      "id": 9025,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        22174,
                        22175
                      ],
                      "referencedDeclaration": 22175,
                      "src": "14854:7:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 9039,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14854:135:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9040,
                  "nodeType": "ExpressionStatement",
                  "src": "14854:135:26"
                }
              ]
            },
            "documentation": "@dev method to recover any stuck erc20 tokens (ie compound COMP)\n@param _token the ERC20 token to recover",
            "id": 9042,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 9023,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 9022,
                  "name": "onlyAvatar",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1325,
                  "src": "14833:10:26",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "14833:10:26"
              }
            ],
            "name": "recover",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 9021,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9020,
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 9042,
                  "src": "14812:12:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ERC20_$21849",
                    "typeString": "contract ERC20"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 9019,
                    "name": "ERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21849,
                    "src": "14812:5:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$21849",
                      "typeString": "contract ERC20"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "14811:14:26"
            },
            "returnParameters": {
              "id": 9024,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "14844:0:26"
            },
            "scope": 9043,
            "src": "14795:201:26",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          }
        ],
        "scope": 9044,
        "src": "1355:13643:26"
      }
    ],
    "src": "0:14999:26"
  },
  "compiler": {
    "name": "solc",
    "version": "0.5.16+commit.9c3226ce.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.2.2",
  "updatedAt": "2021-08-23T07:33:52.283Z",
  "devdoc": {
    "methods": {}
  },
  "userdoc": {
    "methods": {}
  }
}