{
  "contractName": "DummyDGXStorage",
  "abi": [
    {
      "inputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_DummyDGXInteractive",
          "type": "address"
        }
      ],
      "name": "setInteractive",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "read_demurrage_config",
      "outputs": [
        {
          "name": "_collector_balance",
          "type": "uint256"
        },
        {
          "name": "_base",
          "type": "uint256"
        },
        {
          "name": "_rate",
          "type": "uint256"
        },
        {
          "name": "_collector",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "read_demurrage_config_underlying",
      "outputs": [
        {
          "name": "_base",
          "type": "uint256"
        },
        {
          "name": "_rate",
          "type": "uint256"
        },
        {
          "name": "_collector",
          "type": "address"
        },
        {
          "name": "_no_demurrage_fee",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "read_transfer_config",
      "outputs": [
        {
          "name": "_collector_balance",
          "type": "uint256"
        },
        {
          "name": "_base",
          "type": "uint256"
        },
        {
          "name": "_rate",
          "type": "uint256"
        },
        {
          "name": "_collector",
          "type": "address"
        },
        {
          "name": "_no_transfer_fee",
          "type": "bool"
        },
        {
          "name": "_minimum_transfer_amount",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_account",
          "type": "address"
        }
      ],
      "name": "read_user_for_transfer",
      "outputs": [
        {
          "name": "_raw_balance",
          "type": "uint256"
        },
        {
          "name": "_no_transfer_fee",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_account",
          "type": "address"
        }
      ],
      "name": "read_user_for_demurrage",
      "outputs": [
        {
          "name": "_raw_balance",
          "type": "uint256"
        },
        {
          "name": "_payment_date",
          "type": "uint256"
        },
        {
          "name": "_no_demurrage_fee",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "read_total_supply",
      "outputs": [
        {
          "name": "_totalSupply",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_owner",
          "type": "address"
        },
        {
          "name": "_spender",
          "type": "address"
        }
      ],
      "name": "read_allowance",
      "outputs": [
        {
          "name": "_allowance",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_account",
          "type": "address"
        }
      ],
      "name": "read_user_fees_configs",
      "outputs": [
        {
          "name": "_no_demurrage_fee",
          "type": "bool"
        },
        {
          "name": "_no_transfer_fee",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_user",
          "type": "address"
        }
      ],
      "name": "show_demurraged_balance",
      "outputs": [
        {
          "name": "_actual_balance",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_sender",
          "type": "address"
        },
        {
          "name": "_recipient",
          "type": "address"
        },
        {
          "name": "_spender",
          "type": "address"
        },
        {
          "name": "_amount",
          "type": "uint256"
        },
        {
          "name": "_transfer_from",
          "type": "bool"
        }
      ],
      "name": "put_transfer",
      "outputs": [
        {
          "name": "_success",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_account",
          "type": "address"
        },
        {
          "name": "_spender",
          "type": "address"
        },
        {
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "put_approve",
      "outputs": [
        {
          "name": "_success",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_user",
          "type": "address"
        },
        {
          "name": "_no_demurrage_fee",
          "type": "bool"
        },
        {
          "name": "_no_transfer_fee",
          "type": "bool"
        }
      ],
      "name": "update_user_fees_configs",
      "outputs": [
        {
          "name": "_success",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_for",
          "type": "address"
        },
        {
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "mint_dgx_for",
      "outputs": [
        {
          "name": "_success",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_of",
          "type": "address"
        },
        {
          "name": "_byMinutes",
          "type": "uint256"
        }
      ],
      "name": "modify_last_payment_date",
      "outputs": [
        {
          "name": "_success",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_user",
          "type": "address"
        }
      ],
      "name": "deduct_demurrage",
      "outputs": [
        {
          "name": "_success",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x608060405234801561001057600080fd5b506000806000806000f091506000806000f090506298968060006002016003016000016000018190555060a5600060020160030160000160010181905550612710600060020160030160020160000181905550600d600060020160030160020160010181905550620f424060006002016002018190555060008060020160010160006101000a81548160ff02191690831515021790555060008060020160010160016101000a81548160ff0219169083151502179055507f312e302e30000000000000000000000000000000000000000000000000000000600060020160000181600019169055506000806009018190555033600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050506121db806101546000396000f3006080604052600436106100e6576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806309a0c130146100eb5780630ca9f65c1461015457806338ec8116146101c7578063493f8d30146102225780635722b67f1461029257806357e7946f146102f757806376cab95214610322578063779b742c1461037957806392846ab6146103fe578063a6e653f6146104af578063a77af36e14610515578063d28b43f414610581578063e0fe1d46146105f8578063e1ed956b1461065a578063e2958974146106bf578063f7c9c89a1461073d575b600080fd5b3480156100f757600080fd5b5061012c600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610780565b6040518084815260200183815260200182151515158152602001935050505060405180910390f35b34801561016057600080fd5b506101ad600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190803515159060200190929190505050610896565b604051808215151515815260200191505060405180910390f35b3480156101d357600080fd5b50610208600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506109bf565b604051808215151515815260200191505060405180910390f35b34801561022e57600080fd5b50610237610a25565b604051808581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018215151515815260200194505050505060405180910390f35b34801561029e57600080fd5b506102dd600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610a95565b604051808215151515815260200191505060405180910390f35b34801561030357600080fd5b5061030c610b4f565b6040518082815260200191505060405180910390f35b34801561032e57600080fd5b50610363600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610b5b565b6040518082815260200191505060405180910390f35b34801561038557600080fd5b506103e4600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610bec565b604051808215151515815260200191505060405180910390f35b34801561040a57600080fd5b50610495600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803515159060200190929190505050610ca6565b604051808215151515815260200191505060405180910390f35b3480156104bb57600080fd5b506104f0600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610fd4565b6040518083151515158152602001821515151581526020019250505060405180910390f35b34801561052157600080fd5b5061052a61108c565b604051808581526020018481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200194505050505060405180910390f35b34801561058d57600080fd5b506105e2600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611184565b6040518082815260200191505060405180910390f35b34801561060457600080fd5b50610639600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611213565b60405180838152602001821515151581526020019250505060405180910390f35b34801561066657600080fd5b506106a5600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506112be565b604051808215151515815260200191505060405180910390f35b3480156106cb57600080fd5b506106d461138f565b604051808781526020018681526020018581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183151515158152602001828152602001965050505050505060405180910390f35b34801561074957600080fd5b5061077e600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611481565b005b600080600080600a0160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001016001015492506000600a0160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001016000015491506000600a0160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160000160009054906101000a900460ff168061088d5750600060020160010160009054906101000a900460ff165b90509193909250565b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156108f457600080fd5b826000600a0160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160000160006101000a81548160ff021916908315150217905550816000600a0160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160000160016101000a81548160ff021916908315150217905550600190509392505050565b60006109c9611f46565b6109d283611521565b90506109dd81611616565b9050610a1b81602001516000015182602001516040015160200151836020015160600151600001516020015184600001516000015160200151611821565b6001915050919050565b600080600080600060020160030160000160000154935060006002016003016000016001015492506000800160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169150600060020160010160009054906101000a900460ff16905090919293565b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610af357600080fd5b603c820242036000600a0160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101600001819055506001905092915050565b60008060090154905090565b6000610b65611f46565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610bc157600080fd5b610bca83611521565b9050610bd581611616565b905080602001516040015160200151915050919050565b6000610bf6611f75565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610c5257600080fd5b610c5c8585611184565b81600001818152505060008160000151118015610c795750600083115b15610c8357600080fd5b82816020018181525050610c9c85858360200151611935565b9150509392505050565b6000610cb0611f8f565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610d0c57600080fd5b8573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614151515610d4757600080fd5b60011515610d54886109bf565b1515141515610d6257600080fd5b60011515610d6f876109bf565b1515141515610d7d57600080fd5b610d8561138f565b8660600151600001516000018760600151604001886060015160600189606001516020018a606001516080018b6060015160a0018681525086151515158152508673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815250868152508681525086815250505050505050806060015160a001518410151515610e1e57600080fd5b610e2787611213565b82600001516020015160000183600001516040018215151515815250828152505050610e5286611213565b82602001516020015160000183602001516040018215151515815250828152505050838160a0018181525050828160e00190151590811515815250506001151581606001516080015115151480610eb55750600115158160000151604001511515145b15610eca57610ec3816119cc565b9050610ed6565b610ed381611a86565b90505b600115158160e0015115151415610f8a5760011515610ef4866109bf565b1515141515610f0257600080fd5b610f0c8786611184565b8160400151602001516000018181525050610f3884826040015160200151611b7b90919063ffffffff16565b816040015160200181905250610f8387826000015160200151602001518884602001516020015160200151856060015160000151602001518a87604001516020015160200151611baf565b9150610fbe565b610fbb8782600001516020015160200151888460200151602001516020015185606001516000015160200151611d58565b91505b811515610fca57600080fd5b5095945050505050565b6000806000600a0160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160000160009054906101000a900460ff1691506000600a0160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160000160019054906101000a900460ff169050915091565b600080600080600080600a0160008060000160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101600101549450600060020160010160009054906101000a900460ff1690506000800160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169150801561115a57600093506000925061117d565b600060020160030160000160000154935060006002016003016000016001015492505b5090919293565b600080600a0160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160020160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000806000600a0160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001016001015491506000600a0160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160000160019054906101000a900460ff169050915091565b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561131c57600080fd5b816000600a0160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160010160008282540192505081905550816000600901600082825401925050819055506001905092915050565b6000806000806000806000600a0160008060000160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101600101549550600060020160030160020160000154945060006002016003016002016001015493506000800160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169250600060020160010160019054906101000a900460ff1691506000600201600201549050909192939495565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156114dd57600080fd5b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611529611f46565b61153161108c565b8460000151600001516000018560000151602001866000015160400187600001516060018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815250848152508481525084815250505050508181602001516000019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506115da82610780565b83602001516040015160000184602001516060015160000151600001856020015160200183151515158152508381525083815250505050919050565b61161e611f46565b60008260200151606001516000015160000151141561164e57428260200151606001516000015160000181815250505b60011515826020015160200151151514806116a4575081600001516060015173ffffffffffffffffffffffffffffffffffffffff1682602001516000015173ffffffffffffffffffffffffffffffffffffffff16145b156117005781602001516040015160000151826020015160400151602001818152505081600001516000015160000151826000015160000151602001818152505042826020015160600151600001516020018181525050611819565b61171e62015180836020015160600151611e7590919063ffffffff16565b826020015160600181905250600082602001516060015160200151141561178057816020015160400151600001518260200151604001516020018181525050816000015160000151600001518260000151600001516020018181525050611818565b816000015160200151826000015160400151836020015160400151600001518460200151606001516020015102028115156117b757fe5b048260400181815250506117e08260400151836020015160400151611b7b90919063ffffffff16565b82602001516040018190525061180b8260400151836000015160000151611f0c90919063ffffffff16565b8260000151600001819052505b5b819050919050565b806000600a0160008060000160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160010181905550826000600a0160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160010181905550816000600a0160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001016000018190555050505050565b6000816000600a0160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160020160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600190509392505050565b6119d4611f8f565b60008260c00181815250506119fa8260a001518360800151611f0c90919063ffffffff16565b8260800181905250611a25826080015160200151836000015160200151611b7b90919063ffffffff16565b826000015160200181905250816060015160000151600001518260600151600001516020018181525050611a72826080015160200151836020015160200151611f0c90919063ffffffff16565b826020015160200181905250819050919050565b611a8e611f8f565b8160600151604001518260600151606001518360a0015102811515611aaf57fe5b048260c00181815250508160a0015182608001516000018181525050611ae68260c001518360800151611b7b90919063ffffffff16565b8260800181905250611b0d8260c00151836060015160000151611f0c90919063ffffffff16565b826060015160000181905250611b388260a00151836000015160200151611b7b90919063ffffffff16565b826000015160200181905250611b67826080015160200151836020015160200151611f0c90919063ffffffff16565b826020015160200181905250819050919050565b611b83611f75565b82600001518211151515611b9657600080fd5b8290508183600001510381602001818152505092915050565b6000866000600a0160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160010181905550846000600a0160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160010181905550836000600a0160008060000160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160010181905550816000600a0160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160020160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060019050979650505050505050565b6000846000600a0160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160010181905550826000600a0160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160010181905550816000600a0160008060000160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101600101819055506001905095945050505050565b611e7d611ff5565b6000808492508460000151600001514210151515611e9a57600080fd5b846000015160000151420391508382811515611eb257fe5b04836020018181525050838360200151029050600083602001511415611eed5784600001516000015183600001516020018181525050611f04565b611efb836000015182611f0c565b83600001819052505b505092915050565b611f14611f75565b82600001518284600001510110151515611f2d57600080fd5b8290508183600001510181602001818152505092915050565b6101a060405190810160405280611f5b612016565b8152602001611f6861205b565b8152602001600081525090565b604080519081016040528060008152602001600081525090565b6102e060405190810160405280611fa46120a8565b8152602001611fb16120a8565b8152602001611fbe6120e8565b8152602001611fcb61211f565b8152602001611fd8612174565b815260200160008152602001600081526020016000151581525090565b606060405190810160405280612009612174565b8152602001600081525090565b60a06040519081016040528061202a612174565b81526020016000815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff1681525090565b60e060405190810160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600015158152602001612095612174565b81526020016120a261218e565b81525090565b608060405190810160405280600073ffffffffffffffffffffffffffffffffffffffff1681526020016120d9612174565b81526020016000151581525090565b606060405190810160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001612119612174565b81525090565b60e060405190810160405280612133612174565b8152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815260200160008152602001600015158152602001600081525090565b604080519081016040528060008152602001600081525090565b6060604051908101604052806121a2612174565b81526020016000815250905600a165627a7a72305820b0db7f5e3434e11eec2eeb63f6560fb43b92e2c0ff41f576f2b22c1583a24ed80029",
  "deployedBytecode": "0x6080604052600436106100e6576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806309a0c130146100eb5780630ca9f65c1461015457806338ec8116146101c7578063493f8d30146102225780635722b67f1461029257806357e7946f146102f757806376cab95214610322578063779b742c1461037957806392846ab6146103fe578063a6e653f6146104af578063a77af36e14610515578063d28b43f414610581578063e0fe1d46146105f8578063e1ed956b1461065a578063e2958974146106bf578063f7c9c89a1461073d575b600080fd5b3480156100f757600080fd5b5061012c600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610780565b6040518084815260200183815260200182151515158152602001935050505060405180910390f35b34801561016057600080fd5b506101ad600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190803515159060200190929190505050610896565b604051808215151515815260200191505060405180910390f35b3480156101d357600080fd5b50610208600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506109bf565b604051808215151515815260200191505060405180910390f35b34801561022e57600080fd5b50610237610a25565b604051808581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018215151515815260200194505050505060405180910390f35b34801561029e57600080fd5b506102dd600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610a95565b604051808215151515815260200191505060405180910390f35b34801561030357600080fd5b5061030c610b4f565b6040518082815260200191505060405180910390f35b34801561032e57600080fd5b50610363600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610b5b565b6040518082815260200191505060405180910390f35b34801561038557600080fd5b506103e4600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610bec565b604051808215151515815260200191505060405180910390f35b34801561040a57600080fd5b50610495600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803515159060200190929190505050610ca6565b604051808215151515815260200191505060405180910390f35b3480156104bb57600080fd5b506104f0600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610fd4565b6040518083151515158152602001821515151581526020019250505060405180910390f35b34801561052157600080fd5b5061052a61108c565b604051808581526020018481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200194505050505060405180910390f35b34801561058d57600080fd5b506105e2600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611184565b6040518082815260200191505060405180910390f35b34801561060457600080fd5b50610639600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611213565b60405180838152602001821515151581526020019250505060405180910390f35b34801561066657600080fd5b506106a5600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506112be565b604051808215151515815260200191505060405180910390f35b3480156106cb57600080fd5b506106d461138f565b604051808781526020018681526020018581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183151515158152602001828152602001965050505050505060405180910390f35b34801561074957600080fd5b5061077e600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611481565b005b600080600080600a0160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001016001015492506000600a0160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001016000015491506000600a0160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160000160009054906101000a900460ff168061088d5750600060020160010160009054906101000a900460ff165b90509193909250565b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156108f457600080fd5b826000600a0160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160000160006101000a81548160ff021916908315150217905550816000600a0160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160000160016101000a81548160ff021916908315150217905550600190509392505050565b60006109c9611f46565b6109d283611521565b90506109dd81611616565b9050610a1b81602001516000015182602001516040015160200151836020015160600151600001516020015184600001516000015160200151611821565b6001915050919050565b600080600080600060020160030160000160000154935060006002016003016000016001015492506000800160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169150600060020160010160009054906101000a900460ff16905090919293565b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610af357600080fd5b603c820242036000600a0160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101600001819055506001905092915050565b60008060090154905090565b6000610b65611f46565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610bc157600080fd5b610bca83611521565b9050610bd581611616565b905080602001516040015160200151915050919050565b6000610bf6611f75565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610c5257600080fd5b610c5c8585611184565b81600001818152505060008160000151118015610c795750600083115b15610c8357600080fd5b82816020018181525050610c9c85858360200151611935565b9150509392505050565b6000610cb0611f8f565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610d0c57600080fd5b8573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614151515610d4757600080fd5b60011515610d54886109bf565b1515141515610d6257600080fd5b60011515610d6f876109bf565b1515141515610d7d57600080fd5b610d8561138f565b8660600151600001516000018760600151604001886060015160600189606001516020018a606001516080018b6060015160a0018681525086151515158152508673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815250868152508681525086815250505050505050806060015160a001518410151515610e1e57600080fd5b610e2787611213565b82600001516020015160000183600001516040018215151515815250828152505050610e5286611213565b82602001516020015160000183602001516040018215151515815250828152505050838160a0018181525050828160e00190151590811515815250506001151581606001516080015115151480610eb55750600115158160000151604001511515145b15610eca57610ec3816119cc565b9050610ed6565b610ed381611a86565b90505b600115158160e0015115151415610f8a5760011515610ef4866109bf565b1515141515610f0257600080fd5b610f0c8786611184565b8160400151602001516000018181525050610f3884826040015160200151611b7b90919063ffffffff16565b816040015160200181905250610f8387826000015160200151602001518884602001516020015160200151856060015160000151602001518a87604001516020015160200151611baf565b9150610fbe565b610fbb8782600001516020015160200151888460200151602001516020015185606001516000015160200151611d58565b91505b811515610fca57600080fd5b5095945050505050565b6000806000600a0160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160000160009054906101000a900460ff1691506000600a0160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160000160019054906101000a900460ff169050915091565b600080600080600080600a0160008060000160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101600101549450600060020160010160009054906101000a900460ff1690506000800160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169150801561115a57600093506000925061117d565b600060020160030160000160000154935060006002016003016000016001015492505b5090919293565b600080600a0160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160020160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000806000600a0160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001016001015491506000600a0160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160000160019054906101000a900460ff169050915091565b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561131c57600080fd5b816000600a0160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160010160008282540192505081905550816000600901600082825401925050819055506001905092915050565b6000806000806000806000600a0160008060000160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101600101549550600060020160030160020160000154945060006002016003016002016001015493506000800160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169250600060020160010160019054906101000a900460ff1691506000600201600201549050909192939495565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156114dd57600080fd5b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611529611f46565b61153161108c565b8460000151600001516000018560000151602001866000015160400187600001516060018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815250848152508481525084815250505050508181602001516000019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506115da82610780565b83602001516040015160000184602001516060015160000151600001856020015160200183151515158152508381525083815250505050919050565b61161e611f46565b60008260200151606001516000015160000151141561164e57428260200151606001516000015160000181815250505b60011515826020015160200151151514806116a4575081600001516060015173ffffffffffffffffffffffffffffffffffffffff1682602001516000015173ffffffffffffffffffffffffffffffffffffffff16145b156117005781602001516040015160000151826020015160400151602001818152505081600001516000015160000151826000015160000151602001818152505042826020015160600151600001516020018181525050611819565b61171e62015180836020015160600151611e7590919063ffffffff16565b826020015160600181905250600082602001516060015160200151141561178057816020015160400151600001518260200151604001516020018181525050816000015160000151600001518260000151600001516020018181525050611818565b816000015160200151826000015160400151836020015160400151600001518460200151606001516020015102028115156117b757fe5b048260400181815250506117e08260400151836020015160400151611b7b90919063ffffffff16565b82602001516040018190525061180b8260400151836000015160000151611f0c90919063ffffffff16565b8260000151600001819052505b5b819050919050565b806000600a0160008060000160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160010181905550826000600a0160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160010181905550816000600a0160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001016000018190555050505050565b6000816000600a0160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160020160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600190509392505050565b6119d4611f8f565b60008260c00181815250506119fa8260a001518360800151611f0c90919063ffffffff16565b8260800181905250611a25826080015160200151836000015160200151611b7b90919063ffffffff16565b826000015160200181905250816060015160000151600001518260600151600001516020018181525050611a72826080015160200151836020015160200151611f0c90919063ffffffff16565b826020015160200181905250819050919050565b611a8e611f8f565b8160600151604001518260600151606001518360a0015102811515611aaf57fe5b048260c00181815250508160a0015182608001516000018181525050611ae68260c001518360800151611b7b90919063ffffffff16565b8260800181905250611b0d8260c00151836060015160000151611f0c90919063ffffffff16565b826060015160000181905250611b388260a00151836000015160200151611b7b90919063ffffffff16565b826000015160200181905250611b67826080015160200151836020015160200151611f0c90919063ffffffff16565b826020015160200181905250819050919050565b611b83611f75565b82600001518211151515611b9657600080fd5b8290508183600001510381602001818152505092915050565b6000866000600a0160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160010181905550846000600a0160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160010181905550836000600a0160008060000160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160010181905550816000600a0160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160020160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060019050979650505050505050565b6000846000600a0160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160010181905550826000600a0160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160010181905550816000600a0160008060000160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101600101819055506001905095945050505050565b611e7d611ff5565b6000808492508460000151600001514210151515611e9a57600080fd5b846000015160000151420391508382811515611eb257fe5b04836020018181525050838360200151029050600083602001511415611eed5784600001516000015183600001516020018181525050611f04565b611efb836000015182611f0c565b83600001819052505b505092915050565b611f14611f75565b82600001518284600001510110151515611f2d57600080fd5b8290508183600001510181602001818152505092915050565b6101a060405190810160405280611f5b612016565b8152602001611f6861205b565b8152602001600081525090565b604080519081016040528060008152602001600081525090565b6102e060405190810160405280611fa46120a8565b8152602001611fb16120a8565b8152602001611fbe6120e8565b8152602001611fcb61211f565b8152602001611fd8612174565b815260200160008152602001600081526020016000151581525090565b606060405190810160405280612009612174565b8152602001600081525090565b60a06040519081016040528061202a612174565b81526020016000815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff1681525090565b60e060405190810160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600015158152602001612095612174565b81526020016120a261218e565b81525090565b608060405190810160405280600073ffffffffffffffffffffffffffffffffffffffff1681526020016120d9612174565b81526020016000151581525090565b606060405190810160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001612119612174565b81525090565b60e060405190810160405280612133612174565b8152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815260200160008152602001600015158152602001600081525090565b604080519081016040528060008152602001600081525090565b6060604051908101604052806121a2612174565b81526020016000815250905600a165627a7a72305820b0db7f5e3434e11eec2eeb63f6560fb43b92e2c0ff41f576f2b22c1583a24ed80029",
  "sourceMap": "258:14745:70:-;;;1239:629;8:9:-1;5:2;;;30:1;27;20:12;5:2;1239:629:70;1272:28;1306:27;1391:1;1389;1387;1380:13;1356:37;;1434:1;1432;1430;1423:13;1400:36;;1484:8;1448:6;:13;;:18;;:28;;:33;;:44;;;;1534:3;1498:6;:13;;:18;;:28;;:33;;:39;;;;1578:5;1543:6;:13;;:18;;:27;;:32;;:40;;;;1624:2;1589:6;:13;;:18;;:27;;:32;;:37;;;;1672:7;1632:6;:13;;:37;;:47;;;;1718:5;1685:6;:13;;:30;;;:38;;;;;;;;;;;;;;;;;;1761:5;1729:6;:13;;:29;;;:37;;;;;;;;;;;;;;;;;;1772:39;:6;:13;;:29;;:39;;;;;;;1839:1;1817:6;:19;;:23;;;;1853:10;1846:4;;:17;;;;;;;;;;;;;;;;;;1239:629;;258:14745;;;;;;",
  "deployedSourceMap": "258:14745:70:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4107:447;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4107:447:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8321:340;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8321:340:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11416:435;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11416:435:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2840:388;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2840:388:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9178:250;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9178:250:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4558:135;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4558:135:70;;;;;;;;;;;;;;;;;;;;;;;5282:323;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5282:323:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7891:426;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7891:426:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5609:2278;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5609:2278:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4896:301;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4896:301:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2261:575;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2261:575:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4697:195;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4697:195:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3834:269;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3834:269:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8794:245;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8794:245:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3232:598;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3232:598:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1872:138;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1872:138:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;4107:447;4202:20;4230:21;4259:22;4311:6;:12;;:22;4324:8;4311:22;;;;;;;;;;;;;;;:27;;:39;;;4296:54;;4372:6;:12;;:22;4385:8;4372:22;;;;;;;;;;;;;;;:27;;:45;;;4356:61;;4443:6;:12;;:22;4456:8;4443:22;;;;;;;;;;;;;;;:29;;:46;;;;;;;;;;;;:106;;;;4519:6;:13;;:30;;;;;;;;;;;;4443:106;4423:126;;4107:447;;;;;:::o;8321:340::-;8482:13;2140:23;;;;;;;;;;;2126:37;;:10;:37;;;2118:46;;;;;;;;8551:17;8505:6;:12;;:19;8518:5;8505:19;;;;;;;;;;;;;;;:26;;:43;;;:63;;;;;;;;;;;;;;;;;;8619:16;8574:6;:12;;:19;8587:5;8574:19;;;;;;;;;;;;;;;:26;;:42;;;:61;;;;;;;;;;;;;;;;;;8652:4;8641:15;;8321:340;;;;;:::o;11416:435::-;11481:13;11504:44;;:::i;:::-;11551:26;11571:5;11551:19;:26::i;:::-;11504:73;;11596:31;11616:10;11596:19;:31::i;:::-;11583:44;;11633:192;11666:10;:15;;;:23;;;11697:10;:15;;;:23;;;:28;;;11733:10;:15;;;:28;;;:33;;;:38;;;11779:10;:17;;;:35;;;:40;;;11633:25;:192::i;:::-;11842:4;11831:15;;11416:435;;;;:::o;2840:388::-;2928:13;2949;2970:18;2996:22;3041:6;:13;;:18;;:28;;:33;;;3033:41;;3088:6;:13;;:18;;:28;;:33;;;3080:41;;3140:6;:17;;:27;;;;;;;;;;;;3127:40;;3193:6;:13;;:30;;;;;;;;;;;;3173:50;;2840:388;;;;:::o;9178:250::-;9306:13;2140:23;;;;;;;;;;;2126:37;;:10;:37;;;2118:46;;;;;;;;9392:9;9379:10;:22;9372:3;:30;9329:6;:12;;:17;9342:3;9329:17;;;;;;;;;;;;;;;:22;;:40;;:73;;;;9419:4;9408:15;;9178:250;;;;:::o;4558:135::-;4624:20;4669:6;:19;;;4654:34;;4558:135;:::o;5282:323::-;5392:23;5425:44;;:::i;:::-;2140:23;;;;;;;;;;;2126:37;;:10;:37;;;2118:46;;;;;;;;5472:26;5492:5;5472:19;:26::i;:::-;5425:73;;5517:31;5537:10;5517:19;:31::i;:::-;5504:44;;5572:10;:15;;;:23;;;:28;;;5554:46;;5282:323;;;;:::o;7891:426::-;8030:13;8053:27;;:::i;:::-;2140:23;;;;;;;;;;;2126:37;;:10;:37;;;2118:46;;;;;;;;8096:34;8111:8;8121;8096:14;:34::i;:::-;8087:2;:6;;:43;;;;;8151:1;8142:2;:6;;;:10;8141:29;;;;;8168:1;8158:7;:11;8141:29;8137:176;;;8180:8;;;8137:176;8219:7;8209:2;:7;;:17;;;;;8245:61;8278:8;8288;8298:2;:7;;;8245:32;:61::i;:::-;8234:72;;7891:426;;;;;;:::o;5609:2278::-;5797:13;5956:41;;:::i;:::-;2140:23;;;;;;;;;;;2126:37;;:10;:37;;;2118:46;;;;;;;;5839:10;5828:21;;:7;:21;;;;5820:30;;;;;;;;5893:4;5864:33;;:25;5881:7;5864:16;:25::i;:::-;:33;;;5856:42;;;;;;;;5944:4;5912:36;;:28;5929:10;5912:16;:28::i;:::-;:36;;;5904:45;;;;;;;;6251:22;:20;:22::i;:::-;6011:9;:16;;;:34;;;:38;;6057:9;:16;;;:21;;6086:9;:16;;;:21;;6115:9;:16;;;:26;;6149:9;:16;;;:45;;6202:9;:16;;;:40;;6003:270;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6299:9;:16;;;:40;;;6288:7;:51;;6280:60;;;;;;;;6420:31;6443:7;6420:22;:31::i;:::-;6348:9;:16;;;:24;;;:28;;6378:9;:16;;;:32;;6347:104;;;;;;;;;;;;;;6537:34;6560:10;6537:22;:34::i;:::-;6459:9;:19;;;:27;;;:31;;6492:9;:19;;;:35;;6458:113;;;;;;;;;;;;;;6602:7;6578:9;:21;;:31;;;;;6644:14;6615:9;:26;;:43;;;;;;;;;;;6719:4;6670:53;;:9;:16;;;:45;;;:53;;;6669:111;;;;6775:4;6739:40;;:9;:16;;;:32;;;:40;;;6669:111;6665:266;;;6802:46;6838:9;6802:35;:46::i;:::-;6790:58;;6665:266;;;6881:43;6914:9;6881:32;:43::i;:::-;6869:55;;6665:266;6971:4;6941:34;;:9;:26;;;:34;;;6937:923;;;7023:4;6993:34;;:26;7010:8;6993:16;:26::i;:::-;:34;;;6985:43;;;;;;;;7070:33;7085:7;7094:8;7070:14;:33::i;:::-;7036:9;:17;;;:27;;;:31;;:67;;;;;7141:45;7178:7;7141:9;:17;;;:27;;;:36;;:45;;;;:::i;:::-;7111:9;:17;;;:27;;:75;;;;7206:351;7255:7;7283:9;:16;;;:24;;;:29;;;7333:10;7364:9;:19;;;:27;;;:32;;;7417:9;:16;;;:34;;;:39;;;7477:8;7506:9;:17;;;:27;;;:32;;;7206:28;:351::i;:::-;7195:362;;6937:923;;;7589:264;7633:7;7661:9;:16;;;:24;;;:29;;;7711:10;7742:9;:19;;;:27;;;:32;;;7795:9;:16;;;:34;;;:39;;;7589:23;:264::i;:::-;7578:275;;6937:923;7873:8;7865:17;;;;;;;;5609:2278;;;;;;;;:::o;4896:301::-;4990:22;5020:21;5076:6;:12;;:22;5089:8;5076:22;;;;;;;;;;;;;;;:29;;:46;;;;;;;;;;;;5056:66;;5147:6;:12;;:22;5160:8;5147:22;;;;;;;;;;;;;;;:29;;:45;;;;;;;;;;;;5128:64;;4896:301;;;:::o;2261:575::-;2338:26;2372:13;2393;2414:18;2532:31;2468:6;:12;;:41;2481:6;:17;;:27;;;;;;;;;;;;2468:41;;;;;;;;;;;;;;;:46;;:58;;;2447:79;;2566:6;:13;;:30;;;;;;;;;;;;2532:64;;2615:6;:17;;:27;;;;;;;;;;;;2602:40;;2652:26;2648:184;;;2696:1;2688:9;;2713:1;2705:9;;2648:184;;;2743:6;:13;;:18;;:28;;:33;;;2735:41;;2792:6;:13;;:18;;:28;;:33;;;2784:41;;2648:184;2261:575;;;;;:::o;4697:195::-;4792:18;4833:6;:12;;:20;4846:6;4833:20;;;;;;;;;;;;;;;:25;;:44;;:54;4878:8;4833:54;;;;;;;;;;;;;;;;4820:67;;4697:195;;;;:::o;3834:269::-;3921:20;3943:21;3989:6;:12;;:22;4002:8;3989:22;;;;;;;;;;;;;;;:27;;:39;;;3974:54;;4053:6;:12;;:22;4066:8;4053:22;;;;;;;;;;;;;;;:29;;:45;;;;;;;;;;;;4034:64;;3834:269;;;:::o;8794:245::-;8908:13;2140:23;;;;;;;;;;;2126:37;;:10;:37;;;2118:46;;;;;;;;8970:7;8931:6;:12;;:18;8944:4;8931:18;;;;;;;;;;;;;;;:23;;:35;;;:46;;;;;;;;;;;9006:7;8983:6;:19;;;:30;;;;;;;;;;;9030:4;9019:15;;8794:245;;;;:::o;3232:598::-;3308:26;3342:13;3363;3384:18;3410:21;3439:32;3507:6;:12;;:40;3520:6;:17;;:26;;;;;;;;;;;;3507:40;;;;;;;;;;;;;;;:45;;:57;;;3486:78;;3578:6;:13;;:18;;:27;;:32;;;3570:40;;3624:6;:13;;:18;;:27;;:32;;;3616:40;;3675:6;:17;;:26;;;;;;;;;;;;3662:39;;3726:6;:13;;:29;;;;;;;;;;;;3707:48;;3788:6;:13;;:37;;;3761:64;;3232:598;;;;;;:::o;1872:138::-;2061:4;;;;;;;;;;;2047:18;;:10;:18;;;2039:27;;;;;;;;1985:20;1959:23;;:46;;;;;;;;;;;;;;;;;;1872:138;:::o;9513:510::-;9595:37;;:::i;:::-;9793:23;:21;:23::i;:::-;9650:10;:17;;;:35;;;:39;;9697:10;:17;;;:22;;9727:10;:17;;;:22;;9757:10;:17;;;:27;;9642:174;;;;;;;;;;;;;;;;;;;;;;;;9848:5;9822:10;:15;;;:23;;:31;;;;;;;;;;;9988:30;10012:5;9988:23;:30::i;:::-;9867:10;:15;;;:23;;;:27;;9902:10;:15;;;:28;;;:33;;;:37;;9947:10;:15;;;:32;;9859:159;;;;;;;;;;;;;;;;;;;9513:510;;;:::o;10027:1385::-;10140:38;;:::i;:::-;10233:1;10192:10;:15;;;:28;;;:33;;;:37;;;:42;10188:106;;;10284:3;10244:10;:15;;;:28;;;:33;;;:37;;:43;;;;;10188:106;10398:4;10362:40;;:10;:15;;;:32;;;:40;;;:98;;;;10433:10;:17;;;:27;;;10406:54;;:10;:15;;;:23;;;:54;;;10362:98;10358:1020;;;10501:10;:15;;;:23;;;:27;;;10470:10;:15;;;:23;;;:28;;:58;;;;;10579:10;:17;;;:35;;;:39;;;10536:10;:17;;;:35;;;:40;;:82;;;;;10667:3;10626:10;:15;;;:28;;;:33;;;:38;;:44;;;;;10358:1020;;;10722:47;10762:6;10722:10;:15;;;:28;;;:39;;:47;;;;:::i;:::-;10691:10;:15;;;:28;;:78;;;;10822:1;10781:10;:15;;;:28;;;:37;;;:42;10777:595;;;10866:10;:15;;;:23;;;:27;;;10835:10;:15;;;:23;;;:28;;:58;;;;;10946:10;:17;;;:35;;;:39;;;10903:10;:17;;;:35;;;:40;;:82;;;;;10777:595;;;11134:10;:17;;;:22;;;11108:10;:17;;;:22;;;11078:10;:15;;;:23;;;:27;;;11038:10;:15;;;:28;;;:37;;;:67;:92;11037:119;;;;;;;;11010:10;:24;;:146;;;;;11192:58;11225:10;:24;;;11192:10;:15;;;:23;;;:32;;:58;;;;:::i;:::-;11166:10;:15;;;:23;;:84;;;;11298:65;11338:10;:24;;;11298:10;:17;;;:35;;;:39;;:65;;;;:::i;:::-;11260:10;:17;;;:35;;:103;;;;10777:595;10358:1020;11397:10;11383:24;;10027:1385;;;:::o;11855:404::-;12097:22;12036:6;:12;;:41;12049:6;:17;;:27;;;;;;;;;;;;12036:41;;;;;;;;;;;;;;;:46;;:58;;:83;;;;12164:17;12125:6;:12;;:19;12138:5;12125:19;;;;;;;;;;;;;;;:24;;:36;;:56;;;;12232:22;12187:6;:12;;:19;12200:5;12187:19;;;;;;;;;;;;;;;:24;;:42;;:67;;;;11855:404;;;;:::o;13565:265::-;13708:13;13790:14;13731:6;:12;;:22;13744:8;13731:22;;;;;;;;;;;;;;;:27;;:46;;:56;13778:8;13731:56;;;;;;;;;;;;;;;:73;;;;13821:4;13810:15;;13565:265;;;;;:::o;12263:585::-;12385:38;;:::i;:::-;12449:1;12433:9;:13;;:17;;;;;12484:52;12514:9;:21;;;12484:9;:25;;;:29;;:52;;;;:::i;:::-;12456:9;:25;;:80;;;;12569:65;12603:9;:25;;;:30;;;12569:9;:16;;;:24;;;:33;;:65;;;;:::i;:::-;12542:9;:16;;;:24;;:92;;;;12682:9;:16;;;:34;;;:38;;;12640:9;:16;;;:34;;;:39;;:80;;;;;12756:63;12788:9;:25;;;:30;;;12756:9;:19;;;:27;;;:31;;:63;;;;:::i;:::-;12726:9;:19;;;:27;;:93;;;;12834:9;12825:18;;12263:585;;;:::o;12852:709::-;12971:38;;:::i;:::-;13085:9;:16;;;:21;;;13060:9;:16;;;:21;;;13036:9;:21;;;:45;13035:71;;;;;;;;13019:9;:13;;:87;;;;;13144:9;:21;;;13112:9;:25;;;:29;;:53;;;;;13199:49;13234:9;:13;;;13199:9;:25;;;:34;;:49;;;;:::i;:::-;13171:9;:25;;:77;;;;13291:53;13330:9;:13;;;13291:9;:16;;;:34;;;:38;;:53;;;;:::i;:::-;13254:9;:16;;;:34;;:90;;;;13377:56;13411:9;:21;;;13377:9;:16;;;:24;;;:33;;:56;;;;:::i;:::-;13350:9;:16;;;:24;;:83;;;;13469:63;13501:9;:25;;;:30;;;13469:9;:19;;;:27;;;:31;;:63;;;;:::i;:::-;13439:9;:19;;;:27;;:93;;;;13547:9;13538:18;;12852:709;;;:::o;3118:272:83:-;3239:24;;:::i;:::-;3292:9;:13;;;3281:7;:24;;3273:33;;;;;;;;3327:9;3312:24;;3378:7;3362:9;:13;;;:23;3342:12;:17;;:43;;;;;3118:272;;;;:::o;14345:656:70:-;14633:13;14697:19;14656:6;:12;;:21;14669:7;14656:21;;;;;;;;;;;;;;;:26;;:38;;:60;;;;14766:22;14722:6;:12;;:24;14735:10;14722:24;;;;;;;;;;;;;;;:29;;:41;;:66;;;;14854:35;14794:6;:12;;:40;14807:6;:17;;:26;;;;;;;;;;;;14794:40;;;;;;;;;;;;;;;:45;;:57;;:95;;;;14953:22;14895:6;:12;;:21;14908:7;14895:21;;;;;;;;;;;;;;;:26;;:45;;:55;14941:8;14895:55;;;;;;;;;;;;;;;:80;;;;14992:4;14981:15;;14345:656;;;;;;;;;:::o;13834:507::-;14059:13;14123:19;14082:6;:12;;:21;14095:7;14082:21;;;;;;;;;;;;;;;:26;;:38;;:60;;;;14192:22;14148:6;:12;;:24;14161:10;14148:24;;;;;;;;;;;;;;;:29;;:41;;:66;;;;14280:35;14220:6;:12;;:40;14233:6;:17;;:26;;;;;;;;;;;;14220:40;;;;;;;;;;;;;;;:45;;:57;;:95;;;;14332:4;14321:15;;13834:507;;;;;;;:::o;185:552:83:-;316:29;;:::i;:::-;425:15;519:14;370:9;355:24;;400:9;:14;;;:18;;;393:3;:25;;385:34;;;;;;;;449:9;:14;;;:18;;;443:3;:24;425:42;;507:6;497:7;:16;;;;;;;;473:12;:21;;:40;;;;;560:6;536:12;:21;;;:30;519:47;;601:1;576:12;:21;;;:26;572:161;;;637:9;:14;;;:18;;;612:12;:17;;;:22;;:43;;;;;572:161;;;696:30;700:12;:17;;;719:6;696:3;:30::i;:::-;676:12;:17;;:50;;;;572:161;185:552;;;;;;:::o;2829:285::-;2945:24;;:::i;:::-;3016:9;:13;;;3004:7;2988:9;:13;;;:23;2987:42;;2979:51;;;;;;;;3051:9;3036:24;;3102:7;3086:9;:13;;;:23;3066:12;:17;;:43;;;;;2829:285;;;;:::o;258:14745:70:-;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::o;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::o",
  "source": "pragma solidity ^0.4.23;\n\nimport \"@digix/solidity-core-libraries/contracts/MathUtils.sol\";\nimport \"@digix/solidity-core-libraries/contracts/Types.sol\";\nimport \"./TokenReceiver.sol\";\nimport \"./libs/DemurrageStructs.sol\";\nimport \"./libs/TransferStructs.sol\";\n\ncontract DummyDGXStorage {\n  using Types for Types.MutableUint;\n  using Types for Types.MutableTimestamp;\n\n  struct FeeConfiguration {\n    uint256 base;\n    uint256 rate;\n  }\n\n  struct GlobalConfig {\n    bytes32 current_version;\n    bool no_demurrage_fee;\n    bool no_transfer_fee;\n    uint256 minimum_transfer_amount;\n    Fees fees;\n  }\n\n  struct Fees {\n    FeeConfiguration demurrage;\n    FeeConfiguration transfer;\n  }\n\n  struct Collectors {\n    address demurrage;\n    address transfer;\n  }\n\n  struct UserConfig {\n    bool no_demurrage_fee;\n    bool no_transfer_fee;\n  }\n\n  struct UserData {\n    uint256 last_payment_date;\n    uint256 raw_balance;\n    mapping (address => uint256) spender_allowances;\n  }\n\n  struct User {\n    UserConfig config;\n    UserData data;\n  }\n\n  struct System {\n    Collectors collectors;\n    GlobalConfig config;\n    uint256 total_supply;\n    mapping (address => User) users;\n  }\n\n  System system;\n  address ROOT;\n  address DGX_INTERACTIVE_ADDRESS;\n\n  constructor()\n    public\n  {\n    address _demurrage_collector;\n    address _transfer_collector;\n    assembly {\n      _demurrage_collector := create(0,0,0)\n      _transfer_collector := create(0,0,0)\n    }\n\n    system.config.fees.demurrage.base = 10000000;\n    system.config.fees.demurrage.rate = 165;\n    system.config.fees.transfer.base = 10000;\n    system.config.fees.transfer.rate = 13;\n    system.config.minimum_transfer_amount = 1000000;\n    system.config.no_demurrage_fee = false;\n    system.config.no_transfer_fee = false;\n    system.config.current_version = \"1.0.0\";\n    system.total_supply = 0;\n    ROOT = msg.sender;\n  }\n\n  function setInteractive(address _DummyDGXInteractive)\n    public\n    if_root()\n  {\n    DGX_INTERACTIVE_ADDRESS = _DummyDGXInteractive;\n  }\n\n  modifier if_root() {\n    require(msg.sender == ROOT);\n    _;\n  }\n\n  modifier if_dgx_interactive() {\n    require(msg.sender == DGX_INTERACTIVE_ADDRESS);\n    _;\n  }\n\n  /////////////////////////////// PUBLIC FUNCTIONS ////////////////////////////\n\n  function read_demurrage_config()\n    constant\n    public\n    returns (\n      uint256 _collector_balance,\n      uint256 _base,\n      uint256 _rate,\n      address _collector\n    )\n  {\n    _collector_balance = system.users[system.collectors.demurrage].data.raw_balance;\n    bool _global_demurrage_disabled = system.config.no_demurrage_fee;\n    _collector = system.collectors.demurrage;\n    if (_global_demurrage_disabled) {\n      _base = 0;\n      _rate = 0;\n    } else {\n      _base = system.config.fees.demurrage.base;\n      _rate = system.config.fees.demurrage.rate;\n    }\n  }\n\n  function read_demurrage_config_underlying()\n    public\n    constant\n    returns (\n      uint256 _base,\n      uint256 _rate,\n      address _collector,\n      bool _no_demurrage_fee\n    )\n  {\n    _base = system.config.fees.demurrage.base;\n    _rate = system.config.fees.demurrage.rate;\n    _collector = system.collectors.demurrage;\n    _no_demurrage_fee = system.config.no_demurrage_fee;\n  }\n\n  function read_transfer_config()\n    public\n    constant\n    returns (\n      uint256 _collector_balance,\n      uint256 _base,\n      uint256 _rate,\n      address _collector,\n      bool _no_transfer_fee,\n      uint256 _minimum_transfer_amount\n    )\n  {\n    _collector_balance = system.users[system.collectors.transfer].data.raw_balance;\n    _base = system.config.fees.transfer.base;\n    _rate = system.config.fees.transfer.rate;\n    _collector = system.collectors.transfer;\n    _no_transfer_fee = system.config.no_transfer_fee;\n    _minimum_transfer_amount = system.config.minimum_transfer_amount;\n  }\n\n  function read_user_for_transfer(address _account)\n    public\n    constant\n    returns (uint256 _raw_balance, bool _no_transfer_fee)\n  {\n    _raw_balance = system.users[_account].data.raw_balance;\n    _no_transfer_fee = system.users[_account].config.no_transfer_fee;\n  }\n\n  function read_user_for_demurrage(address _account)\n    public\n    constant\n    returns (\n      uint256 _raw_balance,\n      uint256 _payment_date,\n      bool _no_demurrage_fee\n    )\n  {\n    _raw_balance = system.users[_account].data.raw_balance;\n    _payment_date = system.users[_account].data.last_payment_date;\n    _no_demurrage_fee = system.users[_account].config.no_demurrage_fee ||\n                          system.config.no_demurrage_fee;\n  }\n\n  function read_total_supply()\n    public\n    constant\n    returns (uint256 _totalSupply)\n  {\n    _totalSupply = system.total_supply;\n  }\n\n  function read_allowance(address _owner, address _spender)\n    public\n    constant\n    returns (uint256 _allowance)\n  {\n    _allowance = system.users[_owner].data.spender_allowances[_spender];\n  }\n\n  function read_user_fees_configs(address _account)\n    public\n    constant\n    returns (\n      bool _no_demurrage_fee,\n      bool _no_transfer_fee\n    )\n  {\n    _no_demurrage_fee = system.users[_account].config.no_demurrage_fee;\n    _no_transfer_fee = system.users[_account].config.no_transfer_fee;\n  }\n\n  ////////////////////////// CALLABLE FROM INTERACTIVE ////////////////////////\n\n  function show_demurraged_balance(address _user)\n    public\n    if_dgx_interactive()\n    constant\n    returns (uint256 _actual_balance)\n  {\n    DemurrageStructs.Demurrage memory _demurrage = get_demurraged_data(_user);\n    _demurrage = calculate_demurrage(_demurrage);\n    _actual_balance = _demurrage.user.balance.post;\n  }\n\n  function put_transfer(\n    address _sender,\n    address _recipient,\n    address _spender,\n    uint256 _amount,\n    bool _transfer_from\n  )\n    public\n    if_dgx_interactive()\n    returns (bool _success)\n  {\n    require(_sender != _recipient);\n    require(deduct_demurrage(_sender) == true);\n    require(deduct_demurrage(_recipient) == true);\n\n    TransferStructs.Transfer memory _transfer;\n    (\n      _transfer.config.collector_balance.pre,\n      _transfer.config.base,\n      _transfer.config.rate,\n      _transfer.config.collector,\n      _transfer.config.global_transfer_fee_disabled,\n      _transfer.config.minimum_transfer_amount\n    ) = read_transfer_config();\n\n    require(_amount >= _transfer.config.minimum_transfer_amount);\n\n    (_transfer.sender.balance.pre, _transfer.sender.no_transfer_fee) =\n      read_user_for_transfer(_sender);\n\n    (_transfer.recipient.balance.pre, _transfer.recipient.no_transfer_fee) =\n      read_user_for_transfer(_recipient);\n\n    _transfer.sent_amount = _amount;\n    _transfer.is_transfer_from = _transfer_from;\n\n    if ((_transfer.config.global_transfer_fee_disabled == true) ||\n          (_transfer.sender.no_transfer_fee == true)) {\n      _transfer = build_transfer_with_no_transfer_fee(_transfer);\n    } else {\n      _transfer = build_transfer_with_transfer_fee(_transfer);\n    }\n\n    if (_transfer.is_transfer_from == true) {\n      require(deduct_demurrage(_spender) == true);\n      _transfer.spender.allowance.pre = read_allowance(_sender, _spender);\n      _transfer.spender.allowance = _transfer.spender.allowance.subtract(_amount);\n\n      _success = update_transfer_from_balance(\n                   _sender,\n                   _transfer.sender.balance.post,\n                   _recipient,\n                   _transfer.recipient.balance.post,\n                   _transfer.config.collector_balance.post,\n                   _spender,\n                   _transfer.spender.allowance.post\n                 );\n    } else {\n      _success = update_transfer_balance(\n                   _sender,\n                   _transfer.sender.balance.post,\n                   _recipient,\n                   _transfer.recipient.balance.post,\n                   _transfer.config.collector_balance.post\n                 );\n    }\n    require(_success);\n  }\n\n  function put_approve(\n    address _account,\n    address _spender,\n    uint256 _amount\n  )\n    public\n    if_dgx_interactive()\n    returns (bool _success)\n  {\n    Types.MutableUint memory _a;\n\n    _a.pre = read_allowance(_account, _spender);\n\n    if ((_a.pre > 0) && (_amount > 0)) {\n      revert();\n    } else {\n      _a.post = _amount;\n      _success = update_account_spender_allowance(_account, _spender, _a.post);\n    }\n  }\n\n  function update_user_fees_configs(\n    address _user,\n    bool _no_demurrage_fee,\n    bool _no_transfer_fee\n  )\n    public\n    if_dgx_interactive()\n    returns (bool _success)\n  {\n    system.users[_user].config.no_demurrage_fee = _no_demurrage_fee;\n    system.users[_user].config.no_transfer_fee = _no_transfer_fee;\n    _success = true;\n  }\n\n  // This function is not present in the DummyDGX2.0 token contracts.\n  // For test purpose, only used to bypass the POP process\n  function mint_dgx_for(\n    address _for,\n    uint256 _amount\n  )\n    public\n    if_dgx_interactive()\n    returns (bool _success)\n  {\n    system.users[_for].data.raw_balance += _amount;\n    system.total_supply += _amount;\n    _success = true;\n  }\n\n  // This function is not present in the DummyDGX2.0 token contracts.\n  // For test purpose, only used to simulate demurrage deduction\n  function modify_last_payment_date(\n    address _of,\n    uint256 _byMinutes\n  )\n    public\n    if_dgx_interactive()\n    returns (bool _success)\n  {\n    system.users[_of].data.last_payment_date = now - (_byMinutes * 1 minutes);\n    _success = true;\n  }\n\n  //////////////////////////// PRIVATE FUNCTIONS //////////////////////////////\n\n  function get_demurraged_data(address _user)\n    private\n    constant\n    returns (DemurrageStructs.Demurrage _demurrage)\n  {\n    (\n      _demurrage.config.collector_balance.pre,\n      _demurrage.config.base,\n      _demurrage.config.rate,\n      _demurrage.config.collector\n    ) = read_demurrage_config();\n    _demurrage.user.account = _user;\n    (\n      _demurrage.user.balance.pre,\n      _demurrage.user.payment_date.time.pre,\n      _demurrage.user.no_demurrage_fee\n    ) = read_user_for_demurrage(_user);\n  }\n\n  function calculate_demurrage(DemurrageStructs.Demurrage memory _demurrage)\n    private\n    constant\n    returns (DemurrageStructs.Demurrage _calculated)\n  {\n    if (_demurrage.user.payment_date.time.pre == 0) {\n      _demurrage.user.payment_date.time.pre = now;\n    }\n    // demurrage collector is never deducted for demurrage\n    if (_demurrage.user.no_demurrage_fee == true || _demurrage.user.account == _demurrage.config.collector) {\n      _demurrage.user.balance.post = _demurrage.user.balance.pre;\n      _demurrage.config.collector_balance.post = _demurrage.config.collector_balance.pre;\n      _demurrage.user.payment_date.time.post = now;\n    } else {\n      _demurrage.user.payment_date = _demurrage.user.payment_date.advance_by(1 days);\n      if (_demurrage.user.payment_date.in_units == 0) {\n        _demurrage.user.balance.post = _demurrage.user.balance.pre;\n        _demurrage.config.collector_balance.post = _demurrage.config.collector_balance.pre;\n      } else {\n        _demurrage.collected_fee = (_demurrage.user.payment_date.in_units * _demurrage.user.balance.pre * _demurrage.config.rate) / _demurrage.config.base;\n        _demurrage.user.balance = _demurrage.user.balance.subtract(_demurrage.collected_fee);\n        _demurrage.config.collector_balance = _demurrage.config.collector_balance.add(_demurrage.collected_fee);\n      }\n    }\n    _calculated = _demurrage;\n  }\n\n  function deduct_demurrage(address _user)\n    public\n    returns (bool _success)\n  {\n    DemurrageStructs.Demurrage memory _demurrage = get_demurraged_data(_user);\n    _demurrage = calculate_demurrage(_demurrage);\n    update_user_for_demurrage(\n      _demurrage.user.account,\n      _demurrage.user.balance.post,\n      _demurrage.user.payment_date.time.post,\n      _demurrage.config.collector_balance.post\n    );\n    _success = true;\n  }\n\n  function update_user_for_demurrage(\n    address _user,\n    uint256 _user_new_balance,\n    uint256 _user_new_payment_date,\n    uint256 _collector_new_balance\n  )\n    private\n  {\n    system.users[system.collectors.demurrage].data.raw_balance = _collector_new_balance;\n    system.users[_user].data.raw_balance = _user_new_balance;\n    system.users[_user].data.last_payment_date = _user_new_payment_date;\n  }\n\n  function build_transfer_with_no_transfer_fee(TransferStructs.Transfer memory _transfer)\n    private\n    pure\n    returns (TransferStructs.Transfer memory _built)\n  {\n    _transfer.fee = 0;\n    _transfer.received_amount = _transfer.received_amount.add(_transfer.sent_amount);\n    _transfer.sender.balance = _transfer.sender.balance.subtract(_transfer.received_amount.post);\n    _transfer.config.collector_balance.post = _transfer.config.collector_balance.pre;\n    _transfer.recipient.balance = _transfer.recipient.balance.add(_transfer.received_amount.post);\n    _built = _transfer;\n  }\n\n  function build_transfer_with_transfer_fee(TransferStructs.Transfer memory _transfer)\n    private\n    pure\n    returns (TransferStructs.Transfer memory _built)\n  {\n    _transfer.fee = (_transfer.sent_amount * _transfer.config.rate) / _transfer.config.base;\n    _transfer.received_amount.pre = _transfer.sent_amount;\n    _transfer.received_amount = _transfer.received_amount.subtract(_transfer.fee);\n    _transfer.config.collector_balance = _transfer.config.collector_balance.add(_transfer.fee);\n    _transfer.sender.balance = _transfer.sender.balance.subtract(_transfer.sent_amount);\n    _transfer.recipient.balance = _transfer.recipient.balance.add(_transfer.received_amount.post);\n    _built = _transfer;\n  }\n\n  function update_account_spender_allowance(\n    address _account,\n    address _spender,\n    uint256 _new_allowance\n  )\n    private\n    returns (bool _success)\n  {\n    system.users[_account].data.spender_allowances[_spender] = _new_allowance;\n    _success = true;\n  }\n\n  function update_transfer_balance(\n    address _sender,\n    uint256 _sender_new_balance,\n    address _recipient,\n    uint256 _recipient_new_balance,\n    uint256 _transfer_fee_collector_new_balance\n  )\n    private\n    returns (bool _success)\n  {\n    system.users[_sender].data.raw_balance = _sender_new_balance;\n    system.users[_recipient].data.raw_balance = _recipient_new_balance;\n    system.users[system.collectors.transfer].data.raw_balance = _transfer_fee_collector_new_balance;\n    _success = true;\n  }\n\n  function update_transfer_from_balance(\n    address _sender,\n    uint256 _sender_new_balance,\n    address _recipient,\n    uint256 _recipient_new_balance,\n    uint256 _transfer_fee_collector_new_balance,\n    address _spender,\n    uint256 _spender_new_allowance\n  )\n    private\n    returns (bool _success)\n  {\n    system.users[_sender].data.raw_balance = _sender_new_balance;\n    system.users[_recipient].data.raw_balance = _recipient_new_balance;\n    system.users[system.collectors.transfer].data.raw_balance = _transfer_fee_collector_new_balance;\n    system.users[_sender].data.spender_allowances[_spender] = _spender_new_allowance;\n    _success = true;\n  }\n}\n",
  "sourcePath": "@digix/lite-dgx-contract/contracts/DummyDGXStorage.sol",
  "ast": {
    "absolutePath": "@digix/lite-dgx-contract/contracts/DummyDGXStorage.sol",
    "exportedSymbols": {
      "DummyDGXStorage": [
        21192
      ]
    },
    "id": 21193,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 19612,
        "literals": [
          "solidity",
          "^",
          "0.4",
          ".23"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:24:70"
      },
      {
        "absolutePath": "@digix/solidity-core-libraries/contracts/MathUtils.sol",
        "file": "@digix/solidity-core-libraries/contracts/MathUtils.sol",
        "id": 19613,
        "nodeType": "ImportDirective",
        "scope": 21193,
        "sourceUnit": 25198,
        "src": "26:64:70",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@digix/solidity-core-libraries/contracts/Types.sol",
        "file": "@digix/solidity-core-libraries/contracts/Types.sol",
        "id": 19614,
        "nodeType": "ImportDirective",
        "scope": 21193,
        "sourceUnit": 25518,
        "src": "91:60:70",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@digix/lite-dgx-contract/contracts/TokenReceiver.sol",
        "file": "./TokenReceiver.sol",
        "id": 19615,
        "nodeType": "ImportDirective",
        "scope": 21193,
        "sourceUnit": 21207,
        "src": "152:29:70",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@digix/lite-dgx-contract/contracts/libs/DemurrageStructs.sol",
        "file": "./libs/DemurrageStructs.sol",
        "id": 19616,
        "nodeType": "ImportDirective",
        "scope": 21193,
        "sourceUnit": 21242,
        "src": "182:37:70",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@digix/lite-dgx-contract/contracts/libs/TransferStructs.sol",
        "file": "./libs/TransferStructs.sol",
        "id": 19617,
        "nodeType": "ImportDirective",
        "scope": 21193,
        "sourceUnit": 21294,
        "src": "220:36:70",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 21192,
        "linearizedBaseContracts": [
          21192
        ],
        "name": "DummyDGXStorage",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "id": 19620,
            "libraryName": {
              "contractScope": null,
              "id": 19618,
              "name": "Types",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 25517,
              "src": "293:5:70",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Types_$25517",
                "typeString": "library Types"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "287:34:70",
            "typeName": {
              "contractScope": null,
              "id": 19619,
              "name": "Types.MutableUint",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 25204,
              "src": "303:17:70",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_MutableUint_$25204_storage_ptr",
                "typeString": "struct Types.MutableUint"
              }
            }
          },
          {
            "id": 19623,
            "libraryName": {
              "contractScope": null,
              "id": 19621,
              "name": "Types",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 25517,
              "src": "330:5:70",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Types_$25517",
                "typeString": "library Types"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "324:39:70",
            "typeName": {
              "contractScope": null,
              "id": 19622,
              "name": "Types.MutableTimestamp",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 25209,
              "src": "340:22:70",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_MutableTimestamp_$25209_storage_ptr",
                "typeString": "struct Types.MutableTimestamp"
              }
            }
          },
          {
            "canonicalName": "DummyDGXStorage.FeeConfiguration",
            "id": 19628,
            "members": [
              {
                "constant": false,
                "id": 19625,
                "name": "base",
                "nodeType": "VariableDeclaration",
                "scope": 19628,
                "src": "397:12:70",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 19624,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "397:7:70",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 19627,
                "name": "rate",
                "nodeType": "VariableDeclaration",
                "scope": 19628,
                "src": "415:12:70",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 19626,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "415:7:70",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "FeeConfiguration",
            "nodeType": "StructDefinition",
            "scope": 21192,
            "src": "367:65:70",
            "visibility": "public"
          },
          {
            "canonicalName": "DummyDGXStorage.GlobalConfig",
            "id": 19639,
            "members": [
              {
                "constant": false,
                "id": 19630,
                "name": "current_version",
                "nodeType": "VariableDeclaration",
                "scope": 19639,
                "src": "462:23:70",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                },
                "typeName": {
                  "id": 19629,
                  "name": "bytes32",
                  "nodeType": "ElementaryTypeName",
                  "src": "462:7:70",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 19632,
                "name": "no_demurrage_fee",
                "nodeType": "VariableDeclaration",
                "scope": 19639,
                "src": "491:21:70",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bool",
                  "typeString": "bool"
                },
                "typeName": {
                  "id": 19631,
                  "name": "bool",
                  "nodeType": "ElementaryTypeName",
                  "src": "491:4:70",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 19634,
                "name": "no_transfer_fee",
                "nodeType": "VariableDeclaration",
                "scope": 19639,
                "src": "518:20:70",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bool",
                  "typeString": "bool"
                },
                "typeName": {
                  "id": 19633,
                  "name": "bool",
                  "nodeType": "ElementaryTypeName",
                  "src": "518:4:70",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 19636,
                "name": "minimum_transfer_amount",
                "nodeType": "VariableDeclaration",
                "scope": 19639,
                "src": "544:31:70",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 19635,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "544:7:70",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 19638,
                "name": "fees",
                "nodeType": "VariableDeclaration",
                "scope": 19639,
                "src": "581:9:70",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_Fees_$19644_storage_ptr",
                  "typeString": "struct DummyDGXStorage.Fees"
                },
                "typeName": {
                  "contractScope": null,
                  "id": 19637,
                  "name": "Fees",
                  "nodeType": "UserDefinedTypeName",
                  "referencedDeclaration": 19644,
                  "src": "581:4:70",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Fees_$19644_storage_ptr",
                    "typeString": "struct DummyDGXStorage.Fees"
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "GlobalConfig",
            "nodeType": "StructDefinition",
            "scope": 21192,
            "src": "436:159:70",
            "visibility": "public"
          },
          {
            "canonicalName": "DummyDGXStorage.Fees",
            "id": 19644,
            "members": [
              {
                "constant": false,
                "id": 19641,
                "name": "demurrage",
                "nodeType": "VariableDeclaration",
                "scope": 19644,
                "src": "617:26:70",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_FeeConfiguration_$19628_storage_ptr",
                  "typeString": "struct DummyDGXStorage.FeeConfiguration"
                },
                "typeName": {
                  "contractScope": null,
                  "id": 19640,
                  "name": "FeeConfiguration",
                  "nodeType": "UserDefinedTypeName",
                  "referencedDeclaration": 19628,
                  "src": "617:16:70",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_FeeConfiguration_$19628_storage_ptr",
                    "typeString": "struct DummyDGXStorage.FeeConfiguration"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 19643,
                "name": "transfer",
                "nodeType": "VariableDeclaration",
                "scope": 19644,
                "src": "649:25:70",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_FeeConfiguration_$19628_storage_ptr",
                  "typeString": "struct DummyDGXStorage.FeeConfiguration"
                },
                "typeName": {
                  "contractScope": null,
                  "id": 19642,
                  "name": "FeeConfiguration",
                  "nodeType": "UserDefinedTypeName",
                  "referencedDeclaration": 19628,
                  "src": "649:16:70",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_FeeConfiguration_$19628_storage_ptr",
                    "typeString": "struct DummyDGXStorage.FeeConfiguration"
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "Fees",
            "nodeType": "StructDefinition",
            "scope": 21192,
            "src": "599:80:70",
            "visibility": "public"
          },
          {
            "canonicalName": "DummyDGXStorage.Collectors",
            "id": 19649,
            "members": [
              {
                "constant": false,
                "id": 19646,
                "name": "demurrage",
                "nodeType": "VariableDeclaration",
                "scope": 19649,
                "src": "707:17:70",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                },
                "typeName": {
                  "id": 19645,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "707:7:70",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 19648,
                "name": "transfer",
                "nodeType": "VariableDeclaration",
                "scope": 19649,
                "src": "730:16:70",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                },
                "typeName": {
                  "id": 19647,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "730:7:70",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "Collectors",
            "nodeType": "StructDefinition",
            "scope": 21192,
            "src": "683:68:70",
            "visibility": "public"
          },
          {
            "canonicalName": "DummyDGXStorage.UserConfig",
            "id": 19654,
            "members": [
              {
                "constant": false,
                "id": 19651,
                "name": "no_demurrage_fee",
                "nodeType": "VariableDeclaration",
                "scope": 19654,
                "src": "779:21:70",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bool",
                  "typeString": "bool"
                },
                "typeName": {
                  "id": 19650,
                  "name": "bool",
                  "nodeType": "ElementaryTypeName",
                  "src": "779:4:70",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 19653,
                "name": "no_transfer_fee",
                "nodeType": "VariableDeclaration",
                "scope": 19654,
                "src": "806:20:70",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bool",
                  "typeString": "bool"
                },
                "typeName": {
                  "id": 19652,
                  "name": "bool",
                  "nodeType": "ElementaryTypeName",
                  "src": "806:4:70",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "UserConfig",
            "nodeType": "StructDefinition",
            "scope": 21192,
            "src": "755:76:70",
            "visibility": "public"
          },
          {
            "canonicalName": "DummyDGXStorage.UserData",
            "id": 19663,
            "members": [
              {
                "constant": false,
                "id": 19656,
                "name": "last_payment_date",
                "nodeType": "VariableDeclaration",
                "scope": 19663,
                "src": "857:25:70",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 19655,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "857:7:70",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 19658,
                "name": "raw_balance",
                "nodeType": "VariableDeclaration",
                "scope": 19663,
                "src": "888:19:70",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 19657,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "888:7:70",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 19662,
                "name": "spender_allowances",
                "nodeType": "VariableDeclaration",
                "scope": 19663,
                "src": "913:47:70",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                  "typeString": "mapping(address => uint256)"
                },
                "typeName": {
                  "id": 19661,
                  "keyType": {
                    "id": 19659,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "922:7:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "Mapping",
                  "src": "913:28:70",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                    "typeString": "mapping(address => uint256)"
                  },
                  "valueType": {
                    "id": 19660,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "933:7:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "UserData",
            "nodeType": "StructDefinition",
            "scope": 21192,
            "src": "835:130:70",
            "visibility": "public"
          },
          {
            "canonicalName": "DummyDGXStorage.User",
            "id": 19668,
            "members": [
              {
                "constant": false,
                "id": 19665,
                "name": "config",
                "nodeType": "VariableDeclaration",
                "scope": 19668,
                "src": "987:17:70",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_UserConfig_$19654_storage_ptr",
                  "typeString": "struct DummyDGXStorage.UserConfig"
                },
                "typeName": {
                  "contractScope": null,
                  "id": 19664,
                  "name": "UserConfig",
                  "nodeType": "UserDefinedTypeName",
                  "referencedDeclaration": 19654,
                  "src": "987:10:70",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_UserConfig_$19654_storage_ptr",
                    "typeString": "struct DummyDGXStorage.UserConfig"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 19667,
                "name": "data",
                "nodeType": "VariableDeclaration",
                "scope": 19668,
                "src": "1010:13:70",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_UserData_$19663_storage_ptr",
                  "typeString": "struct DummyDGXStorage.UserData"
                },
                "typeName": {
                  "contractScope": null,
                  "id": 19666,
                  "name": "UserData",
                  "nodeType": "UserDefinedTypeName",
                  "referencedDeclaration": 19663,
                  "src": "1010:8:70",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_UserData_$19663_storage_ptr",
                    "typeString": "struct DummyDGXStorage.UserData"
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "User",
            "nodeType": "StructDefinition",
            "scope": 21192,
            "src": "969:59:70",
            "visibility": "public"
          },
          {
            "canonicalName": "DummyDGXStorage.System",
            "id": 19679,
            "members": [
              {
                "constant": false,
                "id": 19670,
                "name": "collectors",
                "nodeType": "VariableDeclaration",
                "scope": 19679,
                "src": "1052:21:70",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_Collectors_$19649_storage_ptr",
                  "typeString": "struct DummyDGXStorage.Collectors"
                },
                "typeName": {
                  "contractScope": null,
                  "id": 19669,
                  "name": "Collectors",
                  "nodeType": "UserDefinedTypeName",
                  "referencedDeclaration": 19649,
                  "src": "1052:10:70",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Collectors_$19649_storage_ptr",
                    "typeString": "struct DummyDGXStorage.Collectors"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 19672,
                "name": "config",
                "nodeType": "VariableDeclaration",
                "scope": 19679,
                "src": "1079:19:70",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_GlobalConfig_$19639_storage_ptr",
                  "typeString": "struct DummyDGXStorage.GlobalConfig"
                },
                "typeName": {
                  "contractScope": null,
                  "id": 19671,
                  "name": "GlobalConfig",
                  "nodeType": "UserDefinedTypeName",
                  "referencedDeclaration": 19639,
                  "src": "1079:12:70",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_GlobalConfig_$19639_storage_ptr",
                    "typeString": "struct DummyDGXStorage.GlobalConfig"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 19674,
                "name": "total_supply",
                "nodeType": "VariableDeclaration",
                "scope": 19679,
                "src": "1104:20:70",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 19673,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "1104:7:70",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 19678,
                "name": "users",
                "nodeType": "VariableDeclaration",
                "scope": 19679,
                "src": "1130:31:70",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_mapping$_t_address_$_t_struct$_User_$19668_storage_$",
                  "typeString": "mapping(address => struct DummyDGXStorage.User)"
                },
                "typeName": {
                  "id": 19677,
                  "keyType": {
                    "id": 19675,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1139:7:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "Mapping",
                  "src": "1130:25:70",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_address_$_t_struct$_User_$19668_storage_$",
                    "typeString": "mapping(address => struct DummyDGXStorage.User)"
                  },
                  "valueType": {
                    "contractScope": null,
                    "id": 19676,
                    "name": "User",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 19668,
                    "src": "1150:4:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_User_$19668_storage_ptr",
                      "typeString": "struct DummyDGXStorage.User"
                    }
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "System",
            "nodeType": "StructDefinition",
            "scope": 21192,
            "src": "1032:134:70",
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 19681,
            "name": "system",
            "nodeType": "VariableDeclaration",
            "scope": 21192,
            "src": "1170:13:70",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_struct$_System_$19679_storage",
              "typeString": "struct DummyDGXStorage.System"
            },
            "typeName": {
              "contractScope": null,
              "id": 19680,
              "name": "System",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 19679,
              "src": "1170:6:70",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_System_$19679_storage_ptr",
                "typeString": "struct DummyDGXStorage.System"
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 19683,
            "name": "ROOT",
            "nodeType": "VariableDeclaration",
            "scope": 21192,
            "src": "1187:12:70",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 19682,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "1187:7:70",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 19685,
            "name": "DGX_INTERACTIVE_ADDRESS",
            "nodeType": "VariableDeclaration",
            "scope": 21192,
            "src": "1203:31:70",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 19684,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "1203:7:70",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 19786,
              "nodeType": "Block",
              "src": "1266:602:70",
              "statements": [
                {
                  "assignments": [],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 19689,
                      "name": "_demurrage_collector",
                      "nodeType": "VariableDeclaration",
                      "scope": 19787,
                      "src": "1272:28:70",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 19688,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "1272:7:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 19690,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1272:28:70"
                },
                {
                  "assignments": [],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 19692,
                      "name": "_transfer_collector",
                      "nodeType": "VariableDeclaration",
                      "scope": 19787,
                      "src": "1306:27:70",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 19691,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "1306:7:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 19693,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1306:27:70"
                },
                {
                  "externalReferences": [
                    {
                      "_demurrage_collector": {
                        "declaration": 19689,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "1356:20:70",
                        "valueSize": 1
                      }
                    },
                    {
                      "_transfer_collector": {
                        "declaration": 19692,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "1400:19:70",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 19694,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    _demurrage_collector := create(0, 0, 0)\n    _transfer_collector := create(0, 0, 0)\n}",
                  "src": "1339:115:70"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 19705,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 19695,
                              "name": "system",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 19681,
                              "src": "1448:6:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_System_$19679_storage",
                                "typeString": "struct DummyDGXStorage.System storage ref"
                              }
                            },
                            "id": 19700,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "config",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 19672,
                            "src": "1448:13:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_GlobalConfig_$19639_storage",
                              "typeString": "struct DummyDGXStorage.GlobalConfig storage ref"
                            }
                          },
                          "id": 19701,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "fees",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 19638,
                          "src": "1448:18:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Fees_$19644_storage",
                            "typeString": "struct DummyDGXStorage.Fees storage ref"
                          }
                        },
                        "id": 19702,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "demurrage",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 19641,
                        "src": "1448:28:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_FeeConfiguration_$19628_storage",
                          "typeString": "struct DummyDGXStorage.FeeConfiguration storage ref"
                        }
                      },
                      "id": 19703,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "base",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 19625,
                      "src": "1448:33:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "3130303030303030",
                      "id": 19704,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "1484:8:70",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_10000000_by_1",
                        "typeString": "int_const 10000000"
                      },
                      "value": "10000000"
                    },
                    "src": "1448:44:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 19706,
                  "nodeType": "ExpressionStatement",
                  "src": "1448:44:70"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 19717,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 19707,
                              "name": "system",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 19681,
                              "src": "1498:6:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_System_$19679_storage",
                                "typeString": "struct DummyDGXStorage.System storage ref"
                              }
                            },
                            "id": 19712,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "config",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 19672,
                            "src": "1498:13:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_GlobalConfig_$19639_storage",
                              "typeString": "struct DummyDGXStorage.GlobalConfig storage ref"
                            }
                          },
                          "id": 19713,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "fees",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 19638,
                          "src": "1498:18:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Fees_$19644_storage",
                            "typeString": "struct DummyDGXStorage.Fees storage ref"
                          }
                        },
                        "id": 19714,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "demurrage",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 19641,
                        "src": "1498:28:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_FeeConfiguration_$19628_storage",
                          "typeString": "struct DummyDGXStorage.FeeConfiguration storage ref"
                        }
                      },
                      "id": 19715,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "rate",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 19627,
                      "src": "1498:33:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "313635",
                      "id": 19716,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "1534:3:70",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_165_by_1",
                        "typeString": "int_const 165"
                      },
                      "value": "165"
                    },
                    "src": "1498:39:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 19718,
                  "nodeType": "ExpressionStatement",
                  "src": "1498:39:70"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 19729,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 19719,
                              "name": "system",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 19681,
                              "src": "1543:6:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_System_$19679_storage",
                                "typeString": "struct DummyDGXStorage.System storage ref"
                              }
                            },
                            "id": 19724,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "config",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 19672,
                            "src": "1543:13:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_GlobalConfig_$19639_storage",
                              "typeString": "struct DummyDGXStorage.GlobalConfig storage ref"
                            }
                          },
                          "id": 19725,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "fees",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 19638,
                          "src": "1543:18:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Fees_$19644_storage",
                            "typeString": "struct DummyDGXStorage.Fees storage ref"
                          }
                        },
                        "id": 19726,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "transfer",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 19643,
                        "src": "1543:27:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_FeeConfiguration_$19628_storage",
                          "typeString": "struct DummyDGXStorage.FeeConfiguration storage ref"
                        }
                      },
                      "id": 19727,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "base",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 19625,
                      "src": "1543:32:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "3130303030",
                      "id": 19728,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "1578:5:70",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_10000_by_1",
                        "typeString": "int_const 10000"
                      },
                      "value": "10000"
                    },
                    "src": "1543:40:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 19730,
                  "nodeType": "ExpressionStatement",
                  "src": "1543:40:70"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 19741,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 19731,
                              "name": "system",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 19681,
                              "src": "1589:6:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_System_$19679_storage",
                                "typeString": "struct DummyDGXStorage.System storage ref"
                              }
                            },
                            "id": 19736,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "config",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 19672,
                            "src": "1589:13:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_GlobalConfig_$19639_storage",
                              "typeString": "struct DummyDGXStorage.GlobalConfig storage ref"
                            }
                          },
                          "id": 19737,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "fees",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 19638,
                          "src": "1589:18:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Fees_$19644_storage",
                            "typeString": "struct DummyDGXStorage.Fees storage ref"
                          }
                        },
                        "id": 19738,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "transfer",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 19643,
                        "src": "1589:27:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_FeeConfiguration_$19628_storage",
                          "typeString": "struct DummyDGXStorage.FeeConfiguration storage ref"
                        }
                      },
                      "id": 19739,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "rate",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 19627,
                      "src": "1589:32:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "3133",
                      "id": 19740,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "1624:2:70",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_13_by_1",
                        "typeString": "int_const 13"
                      },
                      "value": "13"
                    },
                    "src": "1589:37:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 19742,
                  "nodeType": "ExpressionStatement",
                  "src": "1589:37:70"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 19749,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 19743,
                          "name": "system",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 19681,
                          "src": "1632:6:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_System_$19679_storage",
                            "typeString": "struct DummyDGXStorage.System storage ref"
                          }
                        },
                        "id": 19746,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "config",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 19672,
                        "src": "1632:13:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_GlobalConfig_$19639_storage",
                          "typeString": "struct DummyDGXStorage.GlobalConfig storage ref"
                        }
                      },
                      "id": 19747,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "minimum_transfer_amount",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 19636,
                      "src": "1632:37:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "31303030303030",
                      "id": 19748,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "1672:7:70",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1000000_by_1",
                        "typeString": "int_const 1000000"
                      },
                      "value": "1000000"
                    },
                    "src": "1632:47:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 19750,
                  "nodeType": "ExpressionStatement",
                  "src": "1632:47:70"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 19757,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 19751,
                          "name": "system",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 19681,
                          "src": "1685:6:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_System_$19679_storage",
                            "typeString": "struct DummyDGXStorage.System storage ref"
                          }
                        },
                        "id": 19754,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "config",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 19672,
                        "src": "1685:13:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_GlobalConfig_$19639_storage",
                          "typeString": "struct DummyDGXStorage.GlobalConfig storage ref"
                        }
                      },
                      "id": 19755,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "no_demurrage_fee",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 19632,
                      "src": "1685:30:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "66616c7365",
                      "id": 19756,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "1718:5:70",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "false"
                    },
                    "src": "1685:38:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 19758,
                  "nodeType": "ExpressionStatement",
                  "src": "1685:38:70"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 19765,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 19759,
                          "name": "system",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 19681,
                          "src": "1729:6:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_System_$19679_storage",
                            "typeString": "struct DummyDGXStorage.System storage ref"
                          }
                        },
                        "id": 19762,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "config",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 19672,
                        "src": "1729:13:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_GlobalConfig_$19639_storage",
                          "typeString": "struct DummyDGXStorage.GlobalConfig storage ref"
                        }
                      },
                      "id": 19763,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "no_transfer_fee",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 19634,
                      "src": "1729:29:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "66616c7365",
                      "id": 19764,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "1761:5:70",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "false"
                    },
                    "src": "1729:37:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 19766,
                  "nodeType": "ExpressionStatement",
                  "src": "1729:37:70"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 19773,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 19767,
                          "name": "system",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 19681,
                          "src": "1772:6:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_System_$19679_storage",
                            "typeString": "struct DummyDGXStorage.System storage ref"
                          }
                        },
                        "id": 19770,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "config",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 19672,
                        "src": "1772:13:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_GlobalConfig_$19639_storage",
                          "typeString": "struct DummyDGXStorage.GlobalConfig storage ref"
                        }
                      },
                      "id": 19771,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "current_version",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 19630,
                      "src": "1772:29:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "312e302e30",
                      "id": 19772,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "string",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "1804:7:70",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_stringliteral_06c015bd22b4c69690933c1058878ebdfef31f9aaae40bbe86d8a09fe1b2972c",
                        "typeString": "literal_string \"1.0.0\""
                      },
                      "value": "1.0.0"
                    },
                    "src": "1772:39:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 19774,
                  "nodeType": "ExpressionStatement",
                  "src": "1772:39:70"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 19779,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 19775,
                        "name": "system",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 19681,
                        "src": "1817:6:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_System_$19679_storage",
                          "typeString": "struct DummyDGXStorage.System storage ref"
                        }
                      },
                      "id": 19777,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "total_supply",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 19674,
                      "src": "1817:19:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 19778,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "1839:1:70",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "1817:23:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 19780,
                  "nodeType": "ExpressionStatement",
                  "src": "1817:23:70"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 19784,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 19781,
                      "name": "ROOT",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19683,
                      "src": "1846:4:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 19782,
                        "name": "msg",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 26182,
                        "src": "1853:3:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_message",
                          "typeString": "msg"
                        }
                      },
                      "id": 19783,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sender",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "1853:10:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "1846:17:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 19785,
                  "nodeType": "ExpressionStatement",
                  "src": "1846:17:70"
                }
              ]
            },
            "documentation": null,
            "id": 19787,
            "implemented": true,
            "isConstructor": true,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 19686,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1250:2:70"
            },
            "payable": false,
            "returnParameters": {
              "id": 19687,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1266:0:70"
            },
            "scope": 21192,
            "src": "1239:629:70",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 19798,
              "nodeType": "Block",
              "src": "1953:57:70",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 19796,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 19794,
                      "name": "DGX_INTERACTIVE_ADDRESS",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19685,
                      "src": "1959:23:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 19795,
                      "name": "_DummyDGXInteractive",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19789,
                      "src": "1985:20:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "1959:46:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 19797,
                  "nodeType": "ExpressionStatement",
                  "src": "1959:46:70"
                }
              ]
            },
            "documentation": null,
            "id": 19799,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [],
                "id": 19792,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 19791,
                  "name": "if_root",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 19810,
                  "src": "1941:7:70",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1941:9:70"
              }
            ],
            "name": "setInteractive",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 19790,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 19789,
                  "name": "_DummyDGXInteractive",
                  "nodeType": "VariableDeclaration",
                  "scope": 19799,
                  "src": "1896:28:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 19788,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1896:7:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1895:30:70"
            },
            "payable": false,
            "returnParameters": {
              "id": 19793,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1953:0:70"
            },
            "scope": 21192,
            "src": "1872:138:70",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 19809,
              "nodeType": "Block",
              "src": "2033:45:70",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 19805,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 19802,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 26182,
                            "src": "2047:3:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 19803,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "2047:10:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 19804,
                          "name": "ROOT",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 19683,
                          "src": "2061:4:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "2047:18:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 19801,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        26185,
                        26186
                      ],
                      "referencedDeclaration": 26185,
                      "src": "2039:7:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 19806,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2039:27:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 19807,
                  "nodeType": "ExpressionStatement",
                  "src": "2039:27:70"
                },
                {
                  "id": 19808,
                  "nodeType": "PlaceholderStatement",
                  "src": "2072:1:70"
                }
              ]
            },
            "documentation": null,
            "id": 19810,
            "name": "if_root",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 19800,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2030:2:70"
            },
            "src": "2014:64:70",
            "visibility": "internal"
          },
          {
            "body": {
              "id": 19820,
              "nodeType": "Block",
              "src": "2112:64:70",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 19816,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 19813,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 26182,
                            "src": "2126:3:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 19814,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "2126:10:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 19815,
                          "name": "DGX_INTERACTIVE_ADDRESS",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 19685,
                          "src": "2140:23:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "2126:37:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 19812,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        26185,
                        26186
                      ],
                      "referencedDeclaration": 26185,
                      "src": "2118:7:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 19817,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2118:46:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 19818,
                  "nodeType": "ExpressionStatement",
                  "src": "2118:46:70"
                },
                {
                  "id": 19819,
                  "nodeType": "PlaceholderStatement",
                  "src": "2170:1:70"
                }
              ]
            },
            "documentation": null,
            "id": 19821,
            "name": "if_dgx_interactive",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 19811,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2109:2:70"
            },
            "src": "2082:94:70",
            "visibility": "internal"
          },
          {
            "body": {
              "id": 19883,
              "nodeType": "Block",
              "src": "2441:395:70",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 19841,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 19832,
                      "name": "_collector_balance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19824,
                      "src": "2447:18:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 19833,
                              "name": "system",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 19681,
                              "src": "2468:6:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_System_$19679_storage",
                                "typeString": "struct DummyDGXStorage.System storage ref"
                              }
                            },
                            "id": 19834,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "users",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 19678,
                            "src": "2468:12:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_struct$_User_$19668_storage_$",
                              "typeString": "mapping(address => struct DummyDGXStorage.User storage ref)"
                            }
                          },
                          "id": 19838,
                          "indexExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 19835,
                                "name": "system",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 19681,
                                "src": "2481:6:70",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_System_$19679_storage",
                                  "typeString": "struct DummyDGXStorage.System storage ref"
                                }
                              },
                              "id": 19836,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "collectors",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 19670,
                              "src": "2481:17:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Collectors_$19649_storage",
                                "typeString": "struct DummyDGXStorage.Collectors storage ref"
                              }
                            },
                            "id": 19837,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "demurrage",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 19646,
                            "src": "2481:27:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "2468:41:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_User_$19668_storage",
                            "typeString": "struct DummyDGXStorage.User storage ref"
                          }
                        },
                        "id": 19839,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "data",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 19667,
                        "src": "2468:46:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_UserData_$19663_storage",
                          "typeString": "struct DummyDGXStorage.UserData storage ref"
                        }
                      },
                      "id": 19840,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "raw_balance",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 19658,
                      "src": "2468:58:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2447:79:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 19842,
                  "nodeType": "ExpressionStatement",
                  "src": "2447:79:70"
                },
                {
                  "assignments": [
                    19844
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 19844,
                      "name": "_global_demurrage_disabled",
                      "nodeType": "VariableDeclaration",
                      "scope": 19884,
                      "src": "2532:31:70",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 19843,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "2532:4:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 19848,
                  "initialValue": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 19845,
                        "name": "system",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 19681,
                        "src": "2566:6:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_System_$19679_storage",
                          "typeString": "struct DummyDGXStorage.System storage ref"
                        }
                      },
                      "id": 19846,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "config",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 19672,
                      "src": "2566:13:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_GlobalConfig_$19639_storage",
                        "typeString": "struct DummyDGXStorage.GlobalConfig storage ref"
                      }
                    },
                    "id": 19847,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "no_demurrage_fee",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 19632,
                    "src": "2566:30:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2532:64:70"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 19853,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 19849,
                      "name": "_collector",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19830,
                      "src": "2602:10:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 19850,
                          "name": "system",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 19681,
                          "src": "2615:6:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_System_$19679_storage",
                            "typeString": "struct DummyDGXStorage.System storage ref"
                          }
                        },
                        "id": 19851,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "collectors",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 19670,
                        "src": "2615:17:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Collectors_$19649_storage",
                          "typeString": "struct DummyDGXStorage.Collectors storage ref"
                        }
                      },
                      "id": 19852,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "demurrage",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 19646,
                      "src": "2615:27:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "2602:40:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 19854,
                  "nodeType": "ExpressionStatement",
                  "src": "2602:40:70"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "id": 19855,
                    "name": "_global_demurrage_disabled",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 19844,
                    "src": "2652:26:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 19881,
                    "nodeType": "Block",
                    "src": "2727:105:70",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 19871,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 19865,
                            "name": "_base",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 19826,
                            "src": "2735:5:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 19866,
                                    "name": "system",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 19681,
                                    "src": "2743:6:70",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_System_$19679_storage",
                                      "typeString": "struct DummyDGXStorage.System storage ref"
                                    }
                                  },
                                  "id": 19867,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "config",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 19672,
                                  "src": "2743:13:70",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_GlobalConfig_$19639_storage",
                                    "typeString": "struct DummyDGXStorage.GlobalConfig storage ref"
                                  }
                                },
                                "id": 19868,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "fees",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 19638,
                                "src": "2743:18:70",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Fees_$19644_storage",
                                  "typeString": "struct DummyDGXStorage.Fees storage ref"
                                }
                              },
                              "id": 19869,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "demurrage",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 19641,
                              "src": "2743:28:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_FeeConfiguration_$19628_storage",
                                "typeString": "struct DummyDGXStorage.FeeConfiguration storage ref"
                              }
                            },
                            "id": 19870,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "base",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 19625,
                            "src": "2743:33:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "2735:41:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 19872,
                        "nodeType": "ExpressionStatement",
                        "src": "2735:41:70"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 19879,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 19873,
                            "name": "_rate",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 19828,
                            "src": "2784:5:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 19874,
                                    "name": "system",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 19681,
                                    "src": "2792:6:70",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_System_$19679_storage",
                                      "typeString": "struct DummyDGXStorage.System storage ref"
                                    }
                                  },
                                  "id": 19875,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "config",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 19672,
                                  "src": "2792:13:70",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_GlobalConfig_$19639_storage",
                                    "typeString": "struct DummyDGXStorage.GlobalConfig storage ref"
                                  }
                                },
                                "id": 19876,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "fees",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 19638,
                                "src": "2792:18:70",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Fees_$19644_storage",
                                  "typeString": "struct DummyDGXStorage.Fees storage ref"
                                }
                              },
                              "id": 19877,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "demurrage",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 19641,
                              "src": "2792:28:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_FeeConfiguration_$19628_storage",
                                "typeString": "struct DummyDGXStorage.FeeConfiguration storage ref"
                              }
                            },
                            "id": 19878,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "rate",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 19627,
                            "src": "2792:33:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "2784:41:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 19880,
                        "nodeType": "ExpressionStatement",
                        "src": "2784:41:70"
                      }
                    ]
                  },
                  "id": 19882,
                  "nodeType": "IfStatement",
                  "src": "2648:184:70",
                  "trueBody": {
                    "id": 19864,
                    "nodeType": "Block",
                    "src": "2680:41:70",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 19858,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 19856,
                            "name": "_base",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 19826,
                            "src": "2688:5:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 19857,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2696:1:70",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "2688:9:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 19859,
                        "nodeType": "ExpressionStatement",
                        "src": "2688:9:70"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 19862,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 19860,
                            "name": "_rate",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 19828,
                            "src": "2705:5:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 19861,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2713:1:70",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "2705:9:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 19863,
                        "nodeType": "ExpressionStatement",
                        "src": "2705:9:70"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": "//////////////////////////// PUBLIC FUNCTIONS ////////////////////////////",
            "id": 19884,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "read_demurrage_config",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 19822,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2291:2:70"
            },
            "payable": false,
            "returnParameters": {
              "id": 19831,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 19824,
                  "name": "_collector_balance",
                  "nodeType": "VariableDeclaration",
                  "scope": 19884,
                  "src": "2338:26:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 19823,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2338:7:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 19826,
                  "name": "_base",
                  "nodeType": "VariableDeclaration",
                  "scope": 19884,
                  "src": "2372:13:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 19825,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2372:7:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 19828,
                  "name": "_rate",
                  "nodeType": "VariableDeclaration",
                  "scope": 19884,
                  "src": "2393:13:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 19827,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2393:7:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 19830,
                  "name": "_collector",
                  "nodeType": "VariableDeclaration",
                  "scope": 19884,
                  "src": "2414:18:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 19829,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2414:7:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2330:108:70"
            },
            "scope": 21192,
            "src": "2261:575:70",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 19923,
              "nodeType": "Block",
              "src": "3027:201:70",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 19901,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 19895,
                      "name": "_base",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19887,
                      "src": "3033:5:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 19896,
                              "name": "system",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 19681,
                              "src": "3041:6:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_System_$19679_storage",
                                "typeString": "struct DummyDGXStorage.System storage ref"
                              }
                            },
                            "id": 19897,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "config",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 19672,
                            "src": "3041:13:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_GlobalConfig_$19639_storage",
                              "typeString": "struct DummyDGXStorage.GlobalConfig storage ref"
                            }
                          },
                          "id": 19898,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "fees",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 19638,
                          "src": "3041:18:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Fees_$19644_storage",
                            "typeString": "struct DummyDGXStorage.Fees storage ref"
                          }
                        },
                        "id": 19899,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "demurrage",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 19641,
                        "src": "3041:28:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_FeeConfiguration_$19628_storage",
                          "typeString": "struct DummyDGXStorage.FeeConfiguration storage ref"
                        }
                      },
                      "id": 19900,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "base",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 19625,
                      "src": "3041:33:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3033:41:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 19902,
                  "nodeType": "ExpressionStatement",
                  "src": "3033:41:70"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 19909,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 19903,
                      "name": "_rate",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19889,
                      "src": "3080:5:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 19904,
                              "name": "system",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 19681,
                              "src": "3088:6:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_System_$19679_storage",
                                "typeString": "struct DummyDGXStorage.System storage ref"
                              }
                            },
                            "id": 19905,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "config",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 19672,
                            "src": "3088:13:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_GlobalConfig_$19639_storage",
                              "typeString": "struct DummyDGXStorage.GlobalConfig storage ref"
                            }
                          },
                          "id": 19906,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "fees",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 19638,
                          "src": "3088:18:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Fees_$19644_storage",
                            "typeString": "struct DummyDGXStorage.Fees storage ref"
                          }
                        },
                        "id": 19907,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "demurrage",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 19641,
                        "src": "3088:28:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_FeeConfiguration_$19628_storage",
                          "typeString": "struct DummyDGXStorage.FeeConfiguration storage ref"
                        }
                      },
                      "id": 19908,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "rate",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 19627,
                      "src": "3088:33:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3080:41:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 19910,
                  "nodeType": "ExpressionStatement",
                  "src": "3080:41:70"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 19915,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 19911,
                      "name": "_collector",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19891,
                      "src": "3127:10:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 19912,
                          "name": "system",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 19681,
                          "src": "3140:6:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_System_$19679_storage",
                            "typeString": "struct DummyDGXStorage.System storage ref"
                          }
                        },
                        "id": 19913,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "collectors",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 19670,
                        "src": "3140:17:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Collectors_$19649_storage",
                          "typeString": "struct DummyDGXStorage.Collectors storage ref"
                        }
                      },
                      "id": 19914,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "demurrage",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 19646,
                      "src": "3140:27:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "3127:40:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 19916,
                  "nodeType": "ExpressionStatement",
                  "src": "3127:40:70"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 19921,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 19917,
                      "name": "_no_demurrage_fee",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19893,
                      "src": "3173:17:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 19918,
                          "name": "system",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 19681,
                          "src": "3193:6:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_System_$19679_storage",
                            "typeString": "struct DummyDGXStorage.System storage ref"
                          }
                        },
                        "id": 19919,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "config",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 19672,
                        "src": "3193:13:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_GlobalConfig_$19639_storage",
                          "typeString": "struct DummyDGXStorage.GlobalConfig storage ref"
                        }
                      },
                      "id": 19920,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "no_demurrage_fee",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 19632,
                      "src": "3193:30:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "3173:50:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 19922,
                  "nodeType": "ExpressionStatement",
                  "src": "3173:50:70"
                }
              ]
            },
            "documentation": null,
            "id": 19924,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "read_demurrage_config_underlying",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 19885,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2881:2:70"
            },
            "payable": false,
            "returnParameters": {
              "id": 19894,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 19887,
                  "name": "_base",
                  "nodeType": "VariableDeclaration",
                  "scope": 19924,
                  "src": "2928:13:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 19886,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2928:7:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 19889,
                  "name": "_rate",
                  "nodeType": "VariableDeclaration",
                  "scope": 19924,
                  "src": "2949:13:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 19888,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2949:7:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 19891,
                  "name": "_collector",
                  "nodeType": "VariableDeclaration",
                  "scope": 19924,
                  "src": "2970:18:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 19890,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2970:7:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 19893,
                  "name": "_no_demurrage_fee",
                  "nodeType": "VariableDeclaration",
                  "scope": 19924,
                  "src": "2996:22:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 19892,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "2996:4:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2920:104:70"
            },
            "scope": 21192,
            "src": "2840:388:70",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 19984,
              "nodeType": "Block",
              "src": "3480:350:70",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 19948,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 19939,
                      "name": "_collector_balance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19927,
                      "src": "3486:18:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 19940,
                              "name": "system",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 19681,
                              "src": "3507:6:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_System_$19679_storage",
                                "typeString": "struct DummyDGXStorage.System storage ref"
                              }
                            },
                            "id": 19941,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "users",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 19678,
                            "src": "3507:12:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_struct$_User_$19668_storage_$",
                              "typeString": "mapping(address => struct DummyDGXStorage.User storage ref)"
                            }
                          },
                          "id": 19945,
                          "indexExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 19942,
                                "name": "system",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 19681,
                                "src": "3520:6:70",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_System_$19679_storage",
                                  "typeString": "struct DummyDGXStorage.System storage ref"
                                }
                              },
                              "id": 19943,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "collectors",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 19670,
                              "src": "3520:17:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Collectors_$19649_storage",
                                "typeString": "struct DummyDGXStorage.Collectors storage ref"
                              }
                            },
                            "id": 19944,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "transfer",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 19648,
                            "src": "3520:26:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "3507:40:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_User_$19668_storage",
                            "typeString": "struct DummyDGXStorage.User storage ref"
                          }
                        },
                        "id": 19946,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "data",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 19667,
                        "src": "3507:45:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_UserData_$19663_storage",
                          "typeString": "struct DummyDGXStorage.UserData storage ref"
                        }
                      },
                      "id": 19947,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "raw_balance",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 19658,
                      "src": "3507:57:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3486:78:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 19949,
                  "nodeType": "ExpressionStatement",
                  "src": "3486:78:70"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 19956,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 19950,
                      "name": "_base",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19929,
                      "src": "3570:5:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 19951,
                              "name": "system",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 19681,
                              "src": "3578:6:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_System_$19679_storage",
                                "typeString": "struct DummyDGXStorage.System storage ref"
                              }
                            },
                            "id": 19952,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "config",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 19672,
                            "src": "3578:13:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_GlobalConfig_$19639_storage",
                              "typeString": "struct DummyDGXStorage.GlobalConfig storage ref"
                            }
                          },
                          "id": 19953,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "fees",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 19638,
                          "src": "3578:18:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Fees_$19644_storage",
                            "typeString": "struct DummyDGXStorage.Fees storage ref"
                          }
                        },
                        "id": 19954,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "transfer",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 19643,
                        "src": "3578:27:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_FeeConfiguration_$19628_storage",
                          "typeString": "struct DummyDGXStorage.FeeConfiguration storage ref"
                        }
                      },
                      "id": 19955,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "base",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 19625,
                      "src": "3578:32:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3570:40:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 19957,
                  "nodeType": "ExpressionStatement",
                  "src": "3570:40:70"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 19964,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 19958,
                      "name": "_rate",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19931,
                      "src": "3616:5:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 19959,
                              "name": "system",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 19681,
                              "src": "3624:6:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_System_$19679_storage",
                                "typeString": "struct DummyDGXStorage.System storage ref"
                              }
                            },
                            "id": 19960,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "config",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 19672,
                            "src": "3624:13:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_GlobalConfig_$19639_storage",
                              "typeString": "struct DummyDGXStorage.GlobalConfig storage ref"
                            }
                          },
                          "id": 19961,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "fees",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 19638,
                          "src": "3624:18:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Fees_$19644_storage",
                            "typeString": "struct DummyDGXStorage.Fees storage ref"
                          }
                        },
                        "id": 19962,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "transfer",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 19643,
                        "src": "3624:27:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_FeeConfiguration_$19628_storage",
                          "typeString": "struct DummyDGXStorage.FeeConfiguration storage ref"
                        }
                      },
                      "id": 19963,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "rate",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 19627,
                      "src": "3624:32:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3616:40:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 19965,
                  "nodeType": "ExpressionStatement",
                  "src": "3616:40:70"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 19970,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 19966,
                      "name": "_collector",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19933,
                      "src": "3662:10:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 19967,
                          "name": "system",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 19681,
                          "src": "3675:6:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_System_$19679_storage",
                            "typeString": "struct DummyDGXStorage.System storage ref"
                          }
                        },
                        "id": 19968,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "collectors",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 19670,
                        "src": "3675:17:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Collectors_$19649_storage",
                          "typeString": "struct DummyDGXStorage.Collectors storage ref"
                        }
                      },
                      "id": 19969,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "transfer",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 19648,
                      "src": "3675:26:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "3662:39:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 19971,
                  "nodeType": "ExpressionStatement",
                  "src": "3662:39:70"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 19976,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 19972,
                      "name": "_no_transfer_fee",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19935,
                      "src": "3707:16:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 19973,
                          "name": "system",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 19681,
                          "src": "3726:6:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_System_$19679_storage",
                            "typeString": "struct DummyDGXStorage.System storage ref"
                          }
                        },
                        "id": 19974,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "config",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 19672,
                        "src": "3726:13:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_GlobalConfig_$19639_storage",
                          "typeString": "struct DummyDGXStorage.GlobalConfig storage ref"
                        }
                      },
                      "id": 19975,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "no_transfer_fee",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 19634,
                      "src": "3726:29:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "3707:48:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 19977,
                  "nodeType": "ExpressionStatement",
                  "src": "3707:48:70"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 19982,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 19978,
                      "name": "_minimum_transfer_amount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19937,
                      "src": "3761:24:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 19979,
                          "name": "system",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 19681,
                          "src": "3788:6:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_System_$19679_storage",
                            "typeString": "struct DummyDGXStorage.System storage ref"
                          }
                        },
                        "id": 19980,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "config",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 19672,
                        "src": "3788:13:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_GlobalConfig_$19639_storage",
                          "typeString": "struct DummyDGXStorage.GlobalConfig storage ref"
                        }
                      },
                      "id": 19981,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "minimum_transfer_amount",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 19636,
                      "src": "3788:37:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3761:64:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 19983,
                  "nodeType": "ExpressionStatement",
                  "src": "3761:64:70"
                }
              ]
            },
            "documentation": null,
            "id": 19985,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "read_transfer_config",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 19925,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3261:2:70"
            },
            "payable": false,
            "returnParameters": {
              "id": 19938,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 19927,
                  "name": "_collector_balance",
                  "nodeType": "VariableDeclaration",
                  "scope": 19985,
                  "src": "3308:26:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 19926,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3308:7:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 19929,
                  "name": "_base",
                  "nodeType": "VariableDeclaration",
                  "scope": 19985,
                  "src": "3342:13:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 19928,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3342:7:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 19931,
                  "name": "_rate",
                  "nodeType": "VariableDeclaration",
                  "scope": 19985,
                  "src": "3363:13:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 19930,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3363:7:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 19933,
                  "name": "_collector",
                  "nodeType": "VariableDeclaration",
                  "scope": 19985,
                  "src": "3384:18:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 19932,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3384:7:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 19935,
                  "name": "_no_transfer_fee",
                  "nodeType": "VariableDeclaration",
                  "scope": 19985,
                  "src": "3410:21:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 19934,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "3410:4:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 19937,
                  "name": "_minimum_transfer_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 19985,
                  "src": "3439:32:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 19936,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3439:7:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3300:177:70"
            },
            "scope": 21192,
            "src": "3232:598:70",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 20012,
              "nodeType": "Block",
              "src": "3968:135:70",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 20001,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 19994,
                      "name": "_raw_balance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19990,
                      "src": "3974:12:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 19995,
                              "name": "system",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 19681,
                              "src": "3989:6:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_System_$19679_storage",
                                "typeString": "struct DummyDGXStorage.System storage ref"
                              }
                            },
                            "id": 19996,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "users",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 19678,
                            "src": "3989:12:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_struct$_User_$19668_storage_$",
                              "typeString": "mapping(address => struct DummyDGXStorage.User storage ref)"
                            }
                          },
                          "id": 19998,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 19997,
                            "name": "_account",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 19987,
                            "src": "4002:8:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "3989:22:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_User_$19668_storage",
                            "typeString": "struct DummyDGXStorage.User storage ref"
                          }
                        },
                        "id": 19999,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "data",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 19667,
                        "src": "3989:27:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_UserData_$19663_storage",
                          "typeString": "struct DummyDGXStorage.UserData storage ref"
                        }
                      },
                      "id": 20000,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "raw_balance",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 19658,
                      "src": "3989:39:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3974:54:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 20002,
                  "nodeType": "ExpressionStatement",
                  "src": "3974:54:70"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 20010,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 20003,
                      "name": "_no_transfer_fee",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19992,
                      "src": "4034:16:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 20004,
                              "name": "system",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 19681,
                              "src": "4053:6:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_System_$19679_storage",
                                "typeString": "struct DummyDGXStorage.System storage ref"
                              }
                            },
                            "id": 20005,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "users",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 19678,
                            "src": "4053:12:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_struct$_User_$19668_storage_$",
                              "typeString": "mapping(address => struct DummyDGXStorage.User storage ref)"
                            }
                          },
                          "id": 20007,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 20006,
                            "name": "_account",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 19987,
                            "src": "4066:8:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "4053:22:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_User_$19668_storage",
                            "typeString": "struct DummyDGXStorage.User storage ref"
                          }
                        },
                        "id": 20008,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "config",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 19665,
                        "src": "4053:29:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_UserConfig_$19654_storage",
                          "typeString": "struct DummyDGXStorage.UserConfig storage ref"
                        }
                      },
                      "id": 20009,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "no_transfer_fee",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 19653,
                      "src": "4053:45:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "4034:64:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 20011,
                  "nodeType": "ExpressionStatement",
                  "src": "4034:64:70"
                }
              ]
            },
            "documentation": null,
            "id": 20013,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "read_user_for_transfer",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 19988,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 19987,
                  "name": "_account",
                  "nodeType": "VariableDeclaration",
                  "scope": 20013,
                  "src": "3866:16:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 19986,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3866:7:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3865:18:70"
            },
            "payable": false,
            "returnParameters": {
              "id": 19993,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 19990,
                  "name": "_raw_balance",
                  "nodeType": "VariableDeclaration",
                  "scope": 20013,
                  "src": "3921:20:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 19989,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3921:7:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 19992,
                  "name": "_no_transfer_fee",
                  "nodeType": "VariableDeclaration",
                  "scope": 20013,
                  "src": "3943:21:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 19991,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "3943:4:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3920:45:70"
            },
            "scope": 21192,
            "src": "3834:269:70",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 20055,
              "nodeType": "Block",
              "src": "4290:264:70",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 20031,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 20024,
                      "name": "_raw_balance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20018,
                      "src": "4296:12:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 20025,
                              "name": "system",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 19681,
                              "src": "4311:6:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_System_$19679_storage",
                                "typeString": "struct DummyDGXStorage.System storage ref"
                              }
                            },
                            "id": 20026,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "users",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 19678,
                            "src": "4311:12:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_struct$_User_$19668_storage_$",
                              "typeString": "mapping(address => struct DummyDGXStorage.User storage ref)"
                            }
                          },
                          "id": 20028,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 20027,
                            "name": "_account",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20015,
                            "src": "4324:8:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "4311:22:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_User_$19668_storage",
                            "typeString": "struct DummyDGXStorage.User storage ref"
                          }
                        },
                        "id": 20029,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "data",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 19667,
                        "src": "4311:27:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_UserData_$19663_storage",
                          "typeString": "struct DummyDGXStorage.UserData storage ref"
                        }
                      },
                      "id": 20030,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "raw_balance",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 19658,
                      "src": "4311:39:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "4296:54:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 20032,
                  "nodeType": "ExpressionStatement",
                  "src": "4296:54:70"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 20040,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 20033,
                      "name": "_payment_date",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20020,
                      "src": "4356:13:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 20034,
                              "name": "system",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 19681,
                              "src": "4372:6:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_System_$19679_storage",
                                "typeString": "struct DummyDGXStorage.System storage ref"
                              }
                            },
                            "id": 20035,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "users",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 19678,
                            "src": "4372:12:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_struct$_User_$19668_storage_$",
                              "typeString": "mapping(address => struct DummyDGXStorage.User storage ref)"
                            }
                          },
                          "id": 20037,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 20036,
                            "name": "_account",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20015,
                            "src": "4385:8:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "4372:22:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_User_$19668_storage",
                            "typeString": "struct DummyDGXStorage.User storage ref"
                          }
                        },
                        "id": 20038,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "data",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 19667,
                        "src": "4372:27:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_UserData_$19663_storage",
                          "typeString": "struct DummyDGXStorage.UserData storage ref"
                        }
                      },
                      "id": 20039,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "last_payment_date",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 19656,
                      "src": "4372:45:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "4356:61:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 20041,
                  "nodeType": "ExpressionStatement",
                  "src": "4356:61:70"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 20053,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 20042,
                      "name": "_no_demurrage_fee",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20022,
                      "src": "4423:17:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "id": 20052,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 20043,
                                "name": "system",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 19681,
                                "src": "4443:6:70",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_System_$19679_storage",
                                  "typeString": "struct DummyDGXStorage.System storage ref"
                                }
                              },
                              "id": 20044,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "users",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 19678,
                              "src": "4443:12:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_User_$19668_storage_$",
                                "typeString": "mapping(address => struct DummyDGXStorage.User storage ref)"
                              }
                            },
                            "id": 20046,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 20045,
                              "name": "_account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 20015,
                              "src": "4456:8:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "4443:22:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_User_$19668_storage",
                              "typeString": "struct DummyDGXStorage.User storage ref"
                            }
                          },
                          "id": 20047,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "config",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 19665,
                          "src": "4443:29:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_UserConfig_$19654_storage",
                            "typeString": "struct DummyDGXStorage.UserConfig storage ref"
                          }
                        },
                        "id": 20048,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "no_demurrage_fee",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 19651,
                        "src": "4443:46:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "||",
                      "rightExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 20049,
                            "name": "system",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 19681,
                            "src": "4519:6:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_System_$19679_storage",
                              "typeString": "struct DummyDGXStorage.System storage ref"
                            }
                          },
                          "id": 20050,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "config",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 19672,
                          "src": "4519:13:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_GlobalConfig_$19639_storage",
                            "typeString": "struct DummyDGXStorage.GlobalConfig storage ref"
                          }
                        },
                        "id": 20051,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "no_demurrage_fee",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 19632,
                        "src": "4519:30:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "src": "4443:106:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "4423:126:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 20054,
                  "nodeType": "ExpressionStatement",
                  "src": "4423:126:70"
                }
              ]
            },
            "documentation": null,
            "id": 20056,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "read_user_for_demurrage",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 20016,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20015,
                  "name": "_account",
                  "nodeType": "VariableDeclaration",
                  "scope": 20056,
                  "src": "4140:16:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 20014,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4140:7:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4139:18:70"
            },
            "payable": false,
            "returnParameters": {
              "id": 20023,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20018,
                  "name": "_raw_balance",
                  "nodeType": "VariableDeclaration",
                  "scope": 20056,
                  "src": "4202:20:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 20017,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4202:7:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 20020,
                  "name": "_payment_date",
                  "nodeType": "VariableDeclaration",
                  "scope": 20056,
                  "src": "4230:21:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 20019,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4230:7:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 20022,
                  "name": "_no_demurrage_fee",
                  "nodeType": "VariableDeclaration",
                  "scope": 20056,
                  "src": "4259:22:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 20021,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "4259:4:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4194:93:70"
            },
            "scope": 21192,
            "src": "4107:447:70",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 20066,
              "nodeType": "Block",
              "src": "4648:45:70",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 20064,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 20061,
                      "name": "_totalSupply",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20059,
                      "src": "4654:12:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 20062,
                        "name": "system",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 19681,
                        "src": "4669:6:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_System_$19679_storage",
                          "typeString": "struct DummyDGXStorage.System storage ref"
                        }
                      },
                      "id": 20063,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "total_supply",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 19674,
                      "src": "4669:19:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "4654:34:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 20065,
                  "nodeType": "ExpressionStatement",
                  "src": "4654:34:70"
                }
              ]
            },
            "documentation": null,
            "id": 20067,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "read_total_supply",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 20057,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4584:2:70"
            },
            "payable": false,
            "returnParameters": {
              "id": 20060,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20059,
                  "name": "_totalSupply",
                  "nodeType": "VariableDeclaration",
                  "scope": 20067,
                  "src": "4624:20:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 20058,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4624:7:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4623:22:70"
            },
            "scope": 21192,
            "src": "4558:135:70",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 20087,
              "nodeType": "Block",
              "src": "4814:78:70",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 20085,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 20076,
                      "name": "_allowance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20074,
                      "src": "4820:10:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 20077,
                                "name": "system",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 19681,
                                "src": "4833:6:70",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_System_$19679_storage",
                                  "typeString": "struct DummyDGXStorage.System storage ref"
                                }
                              },
                              "id": 20078,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "users",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 19678,
                              "src": "4833:12:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_User_$19668_storage_$",
                                "typeString": "mapping(address => struct DummyDGXStorage.User storage ref)"
                              }
                            },
                            "id": 20080,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 20079,
                              "name": "_owner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 20069,
                              "src": "4846:6:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "4833:20:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_User_$19668_storage",
                              "typeString": "struct DummyDGXStorage.User storage ref"
                            }
                          },
                          "id": 20081,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "data",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 19667,
                          "src": "4833:25:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_UserData_$19663_storage",
                            "typeString": "struct DummyDGXStorage.UserData storage ref"
                          }
                        },
                        "id": 20082,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "spender_allowances",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 19662,
                        "src": "4833:44:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 20084,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 20083,
                        "name": "_spender",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20071,
                        "src": "4878:8:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "4833:54:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "4820:67:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 20086,
                  "nodeType": "ExpressionStatement",
                  "src": "4820:67:70"
                }
              ]
            },
            "documentation": null,
            "id": 20088,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "read_allowance",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 20072,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20069,
                  "name": "_owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 20088,
                  "src": "4721:14:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 20068,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4721:7:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 20071,
                  "name": "_spender",
                  "nodeType": "VariableDeclaration",
                  "scope": 20088,
                  "src": "4737:16:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 20070,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4737:7:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4720:34:70"
            },
            "payable": false,
            "returnParameters": {
              "id": 20075,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20074,
                  "name": "_allowance",
                  "nodeType": "VariableDeclaration",
                  "scope": 20088,
                  "src": "4792:18:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 20073,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4792:7:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4791:20:70"
            },
            "scope": 21192,
            "src": "4697:195:70",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 20115,
              "nodeType": "Block",
              "src": "5050:147:70",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 20104,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 20097,
                      "name": "_no_demurrage_fee",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20093,
                      "src": "5056:17:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 20098,
                              "name": "system",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 19681,
                              "src": "5076:6:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_System_$19679_storage",
                                "typeString": "struct DummyDGXStorage.System storage ref"
                              }
                            },
                            "id": 20099,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "users",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 19678,
                            "src": "5076:12:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_struct$_User_$19668_storage_$",
                              "typeString": "mapping(address => struct DummyDGXStorage.User storage ref)"
                            }
                          },
                          "id": 20101,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 20100,
                            "name": "_account",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20090,
                            "src": "5089:8:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "5076:22:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_User_$19668_storage",
                            "typeString": "struct DummyDGXStorage.User storage ref"
                          }
                        },
                        "id": 20102,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "config",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 19665,
                        "src": "5076:29:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_UserConfig_$19654_storage",
                          "typeString": "struct DummyDGXStorage.UserConfig storage ref"
                        }
                      },
                      "id": 20103,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "no_demurrage_fee",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 19651,
                      "src": "5076:46:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "5056:66:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 20105,
                  "nodeType": "ExpressionStatement",
                  "src": "5056:66:70"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 20113,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 20106,
                      "name": "_no_transfer_fee",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20095,
                      "src": "5128:16:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 20107,
                              "name": "system",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 19681,
                              "src": "5147:6:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_System_$19679_storage",
                                "typeString": "struct DummyDGXStorage.System storage ref"
                              }
                            },
                            "id": 20108,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "users",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 19678,
                            "src": "5147:12:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_struct$_User_$19668_storage_$",
                              "typeString": "mapping(address => struct DummyDGXStorage.User storage ref)"
                            }
                          },
                          "id": 20110,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 20109,
                            "name": "_account",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20090,
                            "src": "5160:8:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "5147:22:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_User_$19668_storage",
                            "typeString": "struct DummyDGXStorage.User storage ref"
                          }
                        },
                        "id": 20111,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "config",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 19665,
                        "src": "5147:29:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_UserConfig_$19654_storage",
                          "typeString": "struct DummyDGXStorage.UserConfig storage ref"
                        }
                      },
                      "id": 20112,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "no_transfer_fee",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 19653,
                      "src": "5147:45:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "5128:64:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 20114,
                  "nodeType": "ExpressionStatement",
                  "src": "5128:64:70"
                }
              ]
            },
            "documentation": null,
            "id": 20116,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "read_user_fees_configs",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 20091,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20090,
                  "name": "_account",
                  "nodeType": "VariableDeclaration",
                  "scope": 20116,
                  "src": "4928:16:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 20089,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4928:7:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4927:18:70"
            },
            "payable": false,
            "returnParameters": {
              "id": 20096,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20093,
                  "name": "_no_demurrage_fee",
                  "nodeType": "VariableDeclaration",
                  "scope": 20116,
                  "src": "4990:22:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 20092,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "4990:4:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 20095,
                  "name": "_no_transfer_fee",
                  "nodeType": "VariableDeclaration",
                  "scope": 20116,
                  "src": "5020:21:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 20094,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "5020:4:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4982:65:70"
            },
            "scope": 21192,
            "src": "4896:301:70",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 20146,
              "nodeType": "Block",
              "src": "5419:186:70",
              "statements": [
                {
                  "assignments": [
                    20128
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 20128,
                      "name": "_demurrage",
                      "nodeType": "VariableDeclaration",
                      "scope": 20147,
                      "src": "5425:44:70",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Demurrage_$21240_memory_ptr",
                        "typeString": "struct DemurrageStructs.Demurrage"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 20127,
                        "name": "DemurrageStructs.Demurrage",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 21240,
                        "src": "5425:26:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Demurrage_$21240_storage_ptr",
                          "typeString": "struct DemurrageStructs.Demurrage"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 20132,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 20130,
                        "name": "_user",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20118,
                        "src": "5492:5:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 20129,
                      "name": "get_demurraged_data",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20605,
                      "src": "5472:19:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_struct$_Demurrage_$21240_memory_ptr_$",
                        "typeString": "function (address) view returns (struct DemurrageStructs.Demurrage memory)"
                      }
                    },
                    "id": 20131,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5472:26:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Demurrage_$21240_memory_ptr",
                      "typeString": "struct DemurrageStructs.Demurrage memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5425:73:70"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 20137,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 20133,
                      "name": "_demurrage",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20128,
                      "src": "5504:10:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Demurrage_$21240_memory_ptr",
                        "typeString": "struct DemurrageStructs.Demurrage memory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 20135,
                          "name": "_demurrage",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 20128,
                          "src": "5537:10:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Demurrage_$21240_memory_ptr",
                            "typeString": "struct DemurrageStructs.Demurrage memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_struct$_Demurrage_$21240_memory_ptr",
                            "typeString": "struct DemurrageStructs.Demurrage memory"
                          }
                        ],
                        "id": 20134,
                        "name": "calculate_demurrage",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20791,
                        "src": "5517:19:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_struct$_Demurrage_$21240_memory_ptr_$returns$_t_struct$_Demurrage_$21240_memory_ptr_$",
                          "typeString": "function (struct DemurrageStructs.Demurrage memory) view returns (struct DemurrageStructs.Demurrage memory)"
                        }
                      },
                      "id": 20136,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "5517:31:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Demurrage_$21240_memory_ptr",
                        "typeString": "struct DemurrageStructs.Demurrage memory"
                      }
                    },
                    "src": "5504:44:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Demurrage_$21240_memory_ptr",
                      "typeString": "struct DemurrageStructs.Demurrage memory"
                    }
                  },
                  "id": 20138,
                  "nodeType": "ExpressionStatement",
                  "src": "5504:44:70"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 20144,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 20139,
                      "name": "_actual_balance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20123,
                      "src": "5554:15:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 20140,
                            "name": "_demurrage",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20128,
                            "src": "5572:10:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Demurrage_$21240_memory_ptr",
                              "typeString": "struct DemurrageStructs.Demurrage memory"
                            }
                          },
                          "id": 20141,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "user",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 21237,
                          "src": "5572:15:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_User_$21224_memory",
                            "typeString": "struct DemurrageStructs.User memory"
                          }
                        },
                        "id": 20142,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "balance",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 21221,
                        "src": "5572:23:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                          "typeString": "struct Types.MutableUint memory"
                        }
                      },
                      "id": 20143,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "post",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 25203,
                      "src": "5572:28:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "5554:46:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 20145,
                  "nodeType": "ExpressionStatement",
                  "src": "5554:46:70"
                }
              ]
            },
            "documentation": "/////////////////////// CALLABLE FROM INTERACTIVE ////////////////////////",
            "id": 20147,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [
              {
                "arguments": [],
                "id": 20121,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 20120,
                  "name": "if_dgx_interactive",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 19821,
                  "src": "5345:18:70",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "5345:20:70"
              }
            ],
            "name": "show_demurraged_balance",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 20119,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20118,
                  "name": "_user",
                  "nodeType": "VariableDeclaration",
                  "scope": 20147,
                  "src": "5315:13:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 20117,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5315:7:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5314:15:70"
            },
            "payable": false,
            "returnParameters": {
              "id": 20124,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20123,
                  "name": "_actual_balance",
                  "nodeType": "VariableDeclaration",
                  "scope": 20147,
                  "src": "5392:23:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 20122,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5392:7:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5391:25:70"
            },
            "scope": 21192,
            "src": "5282:323:70",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 20386,
              "nodeType": "Block",
              "src": "5814:2073:70",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 20167,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 20165,
                          "name": "_sender",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 20149,
                          "src": "5828:7:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 20166,
                          "name": "_recipient",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 20151,
                          "src": "5839:10:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "5828:21:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 20164,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        26185,
                        26186
                      ],
                      "referencedDeclaration": 26185,
                      "src": "5820:7:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 20168,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5820:30:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 20169,
                  "nodeType": "ExpressionStatement",
                  "src": "5820:30:70"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 20175,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 20172,
                              "name": "_sender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 20149,
                              "src": "5881:7:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 20171,
                            "name": "deduct_demurrage",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20836,
                            "src": "5864:16:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$_t_bool_$",
                              "typeString": "function (address) returns (bool)"
                            }
                          },
                          "id": 20173,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5864:25:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "74727565",
                          "id": 20174,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "5893:4:70",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        },
                        "src": "5864:33:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 20170,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        26185,
                        26186
                      ],
                      "referencedDeclaration": 26185,
                      "src": "5856:7:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 20176,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5856:42:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 20177,
                  "nodeType": "ExpressionStatement",
                  "src": "5856:42:70"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 20183,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 20180,
                              "name": "_recipient",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 20151,
                              "src": "5929:10:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 20179,
                            "name": "deduct_demurrage",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20836,
                            "src": "5912:16:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$_t_bool_$",
                              "typeString": "function (address) returns (bool)"
                            }
                          },
                          "id": 20181,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5912:28:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "74727565",
                          "id": 20182,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "5944:4:70",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        },
                        "src": "5912:36:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 20178,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        26185,
                        26186
                      ],
                      "referencedDeclaration": 26185,
                      "src": "5904:7:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 20184,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5904:45:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 20185,
                  "nodeType": "ExpressionStatement",
                  "src": "5904:45:70"
                },
                {
                  "assignments": [],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 20189,
                      "name": "_transfer",
                      "nodeType": "VariableDeclaration",
                      "scope": 20387,
                      "src": "5956:41:70",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                        "typeString": "struct TransferStructs.Transfer"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 20188,
                        "name": "TransferStructs.Transfer",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 21292,
                        "src": "5956:24:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Transfer_$21292_storage_ptr",
                          "typeString": "struct TransferStructs.Transfer"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 20190,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5956:41:70"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 20216,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 20191,
                                "name": "_transfer",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 20189,
                                "src": "6011:9:70",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                                  "typeString": "struct TransferStructs.Transfer memory"
                                }
                              },
                              "id": 20195,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "config",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 21283,
                              "src": "6011:16:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Config_$21275_memory",
                                "typeString": "struct TransferStructs.Config memory"
                              }
                            },
                            "id": 20196,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "collector_balance",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 21264,
                            "src": "6011:34:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                              "typeString": "struct Types.MutableUint memory"
                            }
                          },
                          "id": 20197,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "memberName": "pre",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 25201,
                          "src": "6011:38:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 20198,
                              "name": "_transfer",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 20189,
                              "src": "6057:9:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                                "typeString": "struct TransferStructs.Transfer memory"
                              }
                            },
                            "id": 20199,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "config",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 21283,
                            "src": "6057:16:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Config_$21275_memory",
                              "typeString": "struct TransferStructs.Config memory"
                            }
                          },
                          "id": 20200,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "memberName": "base",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 21268,
                          "src": "6057:21:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 20201,
                              "name": "_transfer",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 20189,
                              "src": "6086:9:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                                "typeString": "struct TransferStructs.Transfer memory"
                              }
                            },
                            "id": 20202,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "config",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 21283,
                            "src": "6086:16:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Config_$21275_memory",
                              "typeString": "struct TransferStructs.Config memory"
                            }
                          },
                          "id": 20203,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "memberName": "rate",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 21270,
                          "src": "6086:21:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 20204,
                              "name": "_transfer",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 20189,
                              "src": "6115:9:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                                "typeString": "struct TransferStructs.Transfer memory"
                              }
                            },
                            "id": 20205,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "config",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 21283,
                            "src": "6115:16:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Config_$21275_memory",
                              "typeString": "struct TransferStructs.Config memory"
                            }
                          },
                          "id": 20206,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "memberName": "collector",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 21266,
                          "src": "6115:26:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 20207,
                              "name": "_transfer",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 20189,
                              "src": "6149:9:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                                "typeString": "struct TransferStructs.Transfer memory"
                              }
                            },
                            "id": 20208,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "config",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 21283,
                            "src": "6149:16:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Config_$21275_memory",
                              "typeString": "struct TransferStructs.Config memory"
                            }
                          },
                          "id": 20209,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "memberName": "global_transfer_fee_disabled",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 21272,
                          "src": "6149:45:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 20210,
                              "name": "_transfer",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 20189,
                              "src": "6202:9:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                                "typeString": "struct TransferStructs.Transfer memory"
                              }
                            },
                            "id": 20211,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "config",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 21283,
                            "src": "6202:16:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Config_$21275_memory",
                              "typeString": "struct TransferStructs.Config memory"
                            }
                          },
                          "id": 20212,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "memberName": "minimum_transfer_amount",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 21274,
                          "src": "6202:40:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "id": 20213,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "TupleExpression",
                      "src": "6003:245:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_address_$_t_bool_$_t_uint256_$",
                        "typeString": "tuple(uint256,uint256,uint256,address,bool,uint256)"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 20214,
                        "name": "read_transfer_config",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 19985,
                        "src": "6251:20:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$_t_uint256_$_t_uint256_$_t_address_$_t_bool_$_t_uint256_$",
                          "typeString": "function () view returns (uint256,uint256,uint256,address,bool,uint256)"
                        }
                      },
                      "id": 20215,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "6251:22:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_address_$_t_bool_$_t_uint256_$",
                        "typeString": "tuple(uint256,uint256,uint256,address,bool,uint256)"
                      }
                    },
                    "src": "6003:270:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 20217,
                  "nodeType": "ExpressionStatement",
                  "src": "6003:270:70"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 20223,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 20219,
                          "name": "_amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 20155,
                          "src": "6288:7:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 20220,
                              "name": "_transfer",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 20189,
                              "src": "6299:9:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                                "typeString": "struct TransferStructs.Transfer memory"
                              }
                            },
                            "id": 20221,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "config",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 21283,
                            "src": "6299:16:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Config_$21275_memory",
                              "typeString": "struct TransferStructs.Config memory"
                            }
                          },
                          "id": 20222,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "minimum_transfer_amount",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 21274,
                          "src": "6299:40:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "6288:51:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 20218,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        26185,
                        26186
                      ],
                      "referencedDeclaration": 26185,
                      "src": "6280:7:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 20224,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6280:60:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 20225,
                  "nodeType": "ExpressionStatement",
                  "src": "6280:60:70"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 20240,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 20226,
                                "name": "_transfer",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 20189,
                                "src": "6348:9:70",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                                  "typeString": "struct TransferStructs.Transfer memory"
                                }
                              },
                              "id": 20230,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 21277,
                              "src": "6348:16:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_User_$21257_memory",
                                "typeString": "struct TransferStructs.User memory"
                              }
                            },
                            "id": 20231,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "balance",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 21254,
                            "src": "6348:24:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                              "typeString": "struct Types.MutableUint memory"
                            }
                          },
                          "id": 20232,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "memberName": "pre",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 25201,
                          "src": "6348:28:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 20233,
                              "name": "_transfer",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 20189,
                              "src": "6378:9:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                                "typeString": "struct TransferStructs.Transfer memory"
                              }
                            },
                            "id": 20234,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 21277,
                            "src": "6378:16:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_User_$21257_memory",
                              "typeString": "struct TransferStructs.User memory"
                            }
                          },
                          "id": 20235,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "memberName": "no_transfer_fee",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 21256,
                          "src": "6378:32:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        }
                      ],
                      "id": 20236,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "TupleExpression",
                      "src": "6347:64:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_uint256_$_t_bool_$",
                        "typeString": "tuple(uint256,bool)"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 20238,
                          "name": "_sender",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 20149,
                          "src": "6443:7:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 20237,
                        "name": "read_user_for_transfer",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20013,
                        "src": "6420:22:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$_t_bool_$",
                          "typeString": "function (address) view returns (uint256,bool)"
                        }
                      },
                      "id": 20239,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "6420:31:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_uint256_$_t_bool_$",
                        "typeString": "tuple(uint256,bool)"
                      }
                    },
                    "src": "6347:104:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 20241,
                  "nodeType": "ExpressionStatement",
                  "src": "6347:104:70"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 20256,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 20242,
                                "name": "_transfer",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 20189,
                                "src": "6459:9:70",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                                  "typeString": "struct TransferStructs.Transfer memory"
                                }
                              },
                              "id": 20246,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "recipient",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 21279,
                              "src": "6459:19:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_User_$21257_memory",
                                "typeString": "struct TransferStructs.User memory"
                              }
                            },
                            "id": 20247,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "balance",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 21254,
                            "src": "6459:27:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                              "typeString": "struct Types.MutableUint memory"
                            }
                          },
                          "id": 20248,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "memberName": "pre",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 25201,
                          "src": "6459:31:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 20249,
                              "name": "_transfer",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 20189,
                              "src": "6492:9:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                                "typeString": "struct TransferStructs.Transfer memory"
                              }
                            },
                            "id": 20250,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "recipient",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 21279,
                            "src": "6492:19:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_User_$21257_memory",
                              "typeString": "struct TransferStructs.User memory"
                            }
                          },
                          "id": 20251,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "memberName": "no_transfer_fee",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 21256,
                          "src": "6492:35:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        }
                      ],
                      "id": 20252,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "TupleExpression",
                      "src": "6458:70:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_uint256_$_t_bool_$",
                        "typeString": "tuple(uint256,bool)"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 20254,
                          "name": "_recipient",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 20151,
                          "src": "6560:10:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 20253,
                        "name": "read_user_for_transfer",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20013,
                        "src": "6537:22:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$_t_bool_$",
                          "typeString": "function (address) view returns (uint256,bool)"
                        }
                      },
                      "id": 20255,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "6537:34:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_uint256_$_t_bool_$",
                        "typeString": "tuple(uint256,bool)"
                      }
                    },
                    "src": "6458:113:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 20257,
                  "nodeType": "ExpressionStatement",
                  "src": "6458:113:70"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 20262,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 20258,
                        "name": "_transfer",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20189,
                        "src": "6578:9:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                          "typeString": "struct TransferStructs.Transfer memory"
                        }
                      },
                      "id": 20260,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "sent_amount",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 21287,
                      "src": "6578:21:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 20261,
                      "name": "_amount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20155,
                      "src": "6602:7:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "6578:31:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 20263,
                  "nodeType": "ExpressionStatement",
                  "src": "6578:31:70"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 20268,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 20264,
                        "name": "_transfer",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20189,
                        "src": "6615:9:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                          "typeString": "struct TransferStructs.Transfer memory"
                        }
                      },
                      "id": 20266,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "is_transfer_from",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 21291,
                      "src": "6615:26:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 20267,
                      "name": "_transfer_from",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20157,
                      "src": "6644:14:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "6615:43:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 20269,
                  "nodeType": "ExpressionStatement",
                  "src": "6615:43:70"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 20282,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 20274,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 20270,
                                "name": "_transfer",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 20189,
                                "src": "6670:9:70",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                                  "typeString": "struct TransferStructs.Transfer memory"
                                }
                              },
                              "id": 20271,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "config",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 21283,
                              "src": "6670:16:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Config_$21275_memory",
                                "typeString": "struct TransferStructs.Config memory"
                              }
                            },
                            "id": 20272,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "global_transfer_fee_disabled",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 21272,
                            "src": "6670:45:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "74727565",
                            "id": 20273,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "bool",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "6719:4:70",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "value": "true"
                          },
                          "src": "6670:53:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        }
                      ],
                      "id": 20275,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "6669:55:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "||",
                    "rightExpression": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 20280,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 20276,
                                "name": "_transfer",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 20189,
                                "src": "6739:9:70",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                                  "typeString": "struct TransferStructs.Transfer memory"
                                }
                              },
                              "id": 20277,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 21277,
                              "src": "6739:16:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_User_$21257_memory",
                                "typeString": "struct TransferStructs.User memory"
                              }
                            },
                            "id": 20278,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "no_transfer_fee",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 21256,
                            "src": "6739:32:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "74727565",
                            "id": 20279,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "bool",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "6775:4:70",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "value": "true"
                          },
                          "src": "6739:40:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        }
                      ],
                      "id": 20281,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "6738:42:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "6669:111:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 20296,
                    "nodeType": "Block",
                    "src": "6861:70:70",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 20294,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 20290,
                            "name": "_transfer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20189,
                            "src": "6869:9:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                              "typeString": "struct TransferStructs.Transfer memory"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 20292,
                                "name": "_transfer",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 20189,
                                "src": "6914:9:70",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                                  "typeString": "struct TransferStructs.Transfer memory"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                                  "typeString": "struct TransferStructs.Transfer memory"
                                }
                              ],
                              "id": 20291,
                              "name": "build_transfer_with_transfer_fee",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 21043,
                              "src": "6881:32:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_struct$_Transfer_$21292_memory_ptr_$returns$_t_struct$_Transfer_$21292_memory_ptr_$",
                                "typeString": "function (struct TransferStructs.Transfer memory) pure returns (struct TransferStructs.Transfer memory)"
                              }
                            },
                            "id": 20293,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "6881:43:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                              "typeString": "struct TransferStructs.Transfer memory"
                            }
                          },
                          "src": "6869:55:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                            "typeString": "struct TransferStructs.Transfer memory"
                          }
                        },
                        "id": 20295,
                        "nodeType": "ExpressionStatement",
                        "src": "6869:55:70"
                      }
                    ]
                  },
                  "id": 20297,
                  "nodeType": "IfStatement",
                  "src": "6665:266:70",
                  "trueBody": {
                    "id": 20289,
                    "nodeType": "Block",
                    "src": "6782:73:70",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 20287,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 20283,
                            "name": "_transfer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20189,
                            "src": "6790:9:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                              "typeString": "struct TransferStructs.Transfer memory"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 20285,
                                "name": "_transfer",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 20189,
                                "src": "6838:9:70",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                                  "typeString": "struct TransferStructs.Transfer memory"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                                  "typeString": "struct TransferStructs.Transfer memory"
                                }
                              ],
                              "id": 20284,
                              "name": "build_transfer_with_no_transfer_fee",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 20952,
                              "src": "6802:35:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_struct$_Transfer_$21292_memory_ptr_$returns$_t_struct$_Transfer_$21292_memory_ptr_$",
                                "typeString": "function (struct TransferStructs.Transfer memory) pure returns (struct TransferStructs.Transfer memory)"
                              }
                            },
                            "id": 20286,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "6802:46:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                              "typeString": "struct TransferStructs.Transfer memory"
                            }
                          },
                          "src": "6790:58:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                            "typeString": "struct TransferStructs.Transfer memory"
                          }
                        },
                        "id": 20288,
                        "nodeType": "ExpressionStatement",
                        "src": "6790:58:70"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 20301,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 20298,
                        "name": "_transfer",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20189,
                        "src": "6941:9:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                          "typeString": "struct TransferStructs.Transfer memory"
                        }
                      },
                      "id": 20299,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "is_transfer_from",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 21291,
                      "src": "6941:26:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "74727565",
                      "id": 20300,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "6971:4:70",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "true"
                    },
                    "src": "6941:34:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 20380,
                    "nodeType": "Block",
                    "src": "7570:290:70",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 20378,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 20361,
                            "name": "_success",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20162,
                            "src": "7578:8:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 20363,
                                "name": "_sender",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 20149,
                                "src": "7633:7:70",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 20364,
                                      "name": "_transfer",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 20189,
                                      "src": "7661:9:70",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                                        "typeString": "struct TransferStructs.Transfer memory"
                                      }
                                    },
                                    "id": 20365,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "sender",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 21277,
                                    "src": "7661:16:70",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_User_$21257_memory",
                                      "typeString": "struct TransferStructs.User memory"
                                    }
                                  },
                                  "id": 20366,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "balance",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 21254,
                                  "src": "7661:24:70",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                                    "typeString": "struct Types.MutableUint memory"
                                  }
                                },
                                "id": 20367,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "post",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 25203,
                                "src": "7661:29:70",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 20368,
                                "name": "_recipient",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 20151,
                                "src": "7711:10:70",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 20369,
                                      "name": "_transfer",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 20189,
                                      "src": "7742:9:70",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                                        "typeString": "struct TransferStructs.Transfer memory"
                                      }
                                    },
                                    "id": 20370,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "recipient",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 21279,
                                    "src": "7742:19:70",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_User_$21257_memory",
                                      "typeString": "struct TransferStructs.User memory"
                                    }
                                  },
                                  "id": 20371,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "balance",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 21254,
                                  "src": "7742:27:70",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                                    "typeString": "struct Types.MutableUint memory"
                                  }
                                },
                                "id": 20372,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "post",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 25203,
                                "src": "7742:32:70",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 20373,
                                      "name": "_transfer",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 20189,
                                      "src": "7795:9:70",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                                        "typeString": "struct TransferStructs.Transfer memory"
                                      }
                                    },
                                    "id": 20374,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "config",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 21283,
                                    "src": "7795:16:70",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Config_$21275_memory",
                                      "typeString": "struct TransferStructs.Config memory"
                                    }
                                  },
                                  "id": 20375,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "collector_balance",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 21264,
                                  "src": "7795:34:70",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                                    "typeString": "struct Types.MutableUint memory"
                                  }
                                },
                                "id": 20376,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "post",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 25203,
                                "src": "7795:39:70",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 20362,
                              "name": "update_transfer_balance",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 21123,
                              "src": "7589:23:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_address_$_t_uint256_$_t_uint256_$returns$_t_bool_$",
                                "typeString": "function (address,uint256,address,uint256,uint256) returns (bool)"
                              }
                            },
                            "id": 20377,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "7589:264:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "7578:275:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 20379,
                        "nodeType": "ExpressionStatement",
                        "src": "7578:275:70"
                      }
                    ]
                  },
                  "id": 20381,
                  "nodeType": "IfStatement",
                  "src": "6937:923:70",
                  "trueBody": {
                    "id": 20360,
                    "nodeType": "Block",
                    "src": "6977:587:70",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "id": 20307,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 20304,
                                    "name": "_spender",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 20153,
                                    "src": "7010:8:70",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "id": 20303,
                                  "name": "deduct_demurrage",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 20836,
                                  "src": "6993:16:70",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$_t_bool_$",
                                    "typeString": "function (address) returns (bool)"
                                  }
                                },
                                "id": 20305,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "6993:26:70",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "argumentTypes": null,
                                "hexValue": "74727565",
                                "id": 20306,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "bool",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "7023:4:70",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                "value": "true"
                              },
                              "src": "6993:34:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 20302,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              26185,
                              26186
                            ],
                            "referencedDeclaration": 26185,
                            "src": "6985:7:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                              "typeString": "function (bool) pure"
                            }
                          },
                          "id": 20308,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6985:43:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 20309,
                        "nodeType": "ExpressionStatement",
                        "src": "6985:43:70"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 20321,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 20310,
                                  "name": "_transfer",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 20189,
                                  "src": "7036:9:70",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                                    "typeString": "struct TransferStructs.Transfer memory"
                                  }
                                },
                                "id": 20314,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "spender",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 21281,
                                "src": "7036:17:70",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Spender_$21262_memory",
                                  "typeString": "struct TransferStructs.Spender memory"
                                }
                              },
                              "id": 20315,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "allowance",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 21261,
                              "src": "7036:27:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                                "typeString": "struct Types.MutableUint memory"
                              }
                            },
                            "id": 20316,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "pre",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 25201,
                            "src": "7036:31:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 20318,
                                "name": "_sender",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 20149,
                                "src": "7085:7:70",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 20319,
                                "name": "_spender",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 20153,
                                "src": "7094:8:70",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 20317,
                              "name": "read_allowance",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 20088,
                              "src": "7070:14:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$returns$_t_uint256_$",
                                "typeString": "function (address,address) view returns (uint256)"
                              }
                            },
                            "id": 20320,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "7070:33:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "7036:67:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 20322,
                        "nodeType": "ExpressionStatement",
                        "src": "7036:67:70"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 20334,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 20323,
                                "name": "_transfer",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 20189,
                                "src": "7111:9:70",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                                  "typeString": "struct TransferStructs.Transfer memory"
                                }
                              },
                              "id": 20326,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "spender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 21281,
                              "src": "7111:17:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Spender_$21262_memory",
                                "typeString": "struct TransferStructs.Spender memory"
                              }
                            },
                            "id": 20327,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "allowance",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 21261,
                            "src": "7111:27:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                              "typeString": "struct Types.MutableUint memory"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 20332,
                                "name": "_amount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 20155,
                                "src": "7178:7:70",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 20328,
                                    "name": "_transfer",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 20189,
                                    "src": "7141:9:70",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                                      "typeString": "struct TransferStructs.Transfer memory"
                                    }
                                  },
                                  "id": 20329,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "spender",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 21281,
                                  "src": "7141:17:70",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Spender_$21262_memory",
                                    "typeString": "struct TransferStructs.Spender memory"
                                  }
                                },
                                "id": 20330,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "allowance",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 21261,
                                "src": "7141:27:70",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                                  "typeString": "struct Types.MutableUint memory"
                                }
                              },
                              "id": 20331,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "subtract",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 25482,
                              "src": "7141:36:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_struct$_MutableUint_$25204_memory_ptr_$_t_uint256_$returns$_t_struct$_MutableUint_$25204_memory_ptr_$bound_to$_t_struct$_MutableUint_$25204_memory_ptr_$",
                                "typeString": "function (struct Types.MutableUint memory,uint256) pure returns (struct Types.MutableUint memory)"
                              }
                            },
                            "id": 20333,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "7141:45:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_MutableUint_$25204_memory_ptr",
                              "typeString": "struct Types.MutableUint memory"
                            }
                          },
                          "src": "7111:75:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                            "typeString": "struct Types.MutableUint memory"
                          }
                        },
                        "id": 20335,
                        "nodeType": "ExpressionStatement",
                        "src": "7111:75:70"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 20358,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 20336,
                            "name": "_success",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20162,
                            "src": "7195:8:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 20338,
                                "name": "_sender",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 20149,
                                "src": "7255:7:70",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 20339,
                                      "name": "_transfer",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 20189,
                                      "src": "7283:9:70",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                                        "typeString": "struct TransferStructs.Transfer memory"
                                      }
                                    },
                                    "id": 20340,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "sender",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 21277,
                                    "src": "7283:16:70",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_User_$21257_memory",
                                      "typeString": "struct TransferStructs.User memory"
                                    }
                                  },
                                  "id": 20341,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "balance",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 21254,
                                  "src": "7283:24:70",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                                    "typeString": "struct Types.MutableUint memory"
                                  }
                                },
                                "id": 20342,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "post",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 25203,
                                "src": "7283:29:70",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 20343,
                                "name": "_recipient",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 20151,
                                "src": "7333:10:70",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 20344,
                                      "name": "_transfer",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 20189,
                                      "src": "7364:9:70",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                                        "typeString": "struct TransferStructs.Transfer memory"
                                      }
                                    },
                                    "id": 20345,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "recipient",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 21279,
                                    "src": "7364:19:70",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_User_$21257_memory",
                                      "typeString": "struct TransferStructs.User memory"
                                    }
                                  },
                                  "id": 20346,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "balance",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 21254,
                                  "src": "7364:27:70",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                                    "typeString": "struct Types.MutableUint memory"
                                  }
                                },
                                "id": 20347,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "post",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 25203,
                                "src": "7364:32:70",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 20348,
                                      "name": "_transfer",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 20189,
                                      "src": "7417:9:70",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                                        "typeString": "struct TransferStructs.Transfer memory"
                                      }
                                    },
                                    "id": 20349,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "config",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 21283,
                                    "src": "7417:16:70",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Config_$21275_memory",
                                      "typeString": "struct TransferStructs.Config memory"
                                    }
                                  },
                                  "id": 20350,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "collector_balance",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 21264,
                                  "src": "7417:34:70",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                                    "typeString": "struct Types.MutableUint memory"
                                  }
                                },
                                "id": 20351,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "post",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 25203,
                                "src": "7417:39:70",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 20352,
                                "name": "_spender",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 20153,
                                "src": "7477:8:70",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 20353,
                                      "name": "_transfer",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 20189,
                                      "src": "7506:9:70",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                                        "typeString": "struct TransferStructs.Transfer memory"
                                      }
                                    },
                                    "id": 20354,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "spender",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 21281,
                                    "src": "7506:17:70",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Spender_$21262_memory",
                                      "typeString": "struct TransferStructs.Spender memory"
                                    }
                                  },
                                  "id": 20355,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "allowance",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 21261,
                                  "src": "7506:27:70",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                                    "typeString": "struct Types.MutableUint memory"
                                  }
                                },
                                "id": 20356,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "post",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 25203,
                                "src": "7506:32:70",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 20337,
                              "name": "update_transfer_from_balance",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 21191,
                              "src": "7206:28:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_address_$_t_uint256_$_t_uint256_$_t_address_$_t_uint256_$returns$_t_bool_$",
                                "typeString": "function (address,uint256,address,uint256,uint256,address,uint256) returns (bool)"
                              }
                            },
                            "id": 20357,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "7206:351:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "7195:362:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 20359,
                        "nodeType": "ExpressionStatement",
                        "src": "7195:362:70"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 20383,
                        "name": "_success",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20162,
                        "src": "7873:8:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 20382,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        26185,
                        26186
                      ],
                      "referencedDeclaration": 26185,
                      "src": "7865:7:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 20384,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7865:17:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 20385,
                  "nodeType": "ExpressionStatement",
                  "src": "7865:17:70"
                }
              ]
            },
            "documentation": null,
            "id": 20387,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [],
                "id": 20160,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 20159,
                  "name": "if_dgx_interactive",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 19821,
                  "src": "5763:18:70",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "5763:20:70"
              }
            ],
            "name": "put_transfer",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 20158,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20149,
                  "name": "_sender",
                  "nodeType": "VariableDeclaration",
                  "scope": 20387,
                  "src": "5636:15:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 20148,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5636:7:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 20151,
                  "name": "_recipient",
                  "nodeType": "VariableDeclaration",
                  "scope": 20387,
                  "src": "5657:18:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 20150,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5657:7:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 20153,
                  "name": "_spender",
                  "nodeType": "VariableDeclaration",
                  "scope": 20387,
                  "src": "5681:16:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 20152,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5681:7:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 20155,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 20387,
                  "src": "5703:15:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 20154,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5703:7:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 20157,
                  "name": "_transfer_from",
                  "nodeType": "VariableDeclaration",
                  "scope": 20387,
                  "src": "5724:19:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 20156,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "5724:4:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5630:117:70"
            },
            "payable": false,
            "returnParameters": {
              "id": 20163,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20162,
                  "name": "_success",
                  "nodeType": "VariableDeclaration",
                  "scope": 20387,
                  "src": "5797:13:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 20161,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "5797:4:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5796:15:70"
            },
            "scope": 21192,
            "src": "5609:2278:70",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 20445,
              "nodeType": "Block",
              "src": "8047:270:70",
              "statements": [
                {
                  "assignments": [],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 20403,
                      "name": "_a",
                      "nodeType": "VariableDeclaration",
                      "scope": 20446,
                      "src": "8053:27:70",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_MutableUint_$25204_memory_ptr",
                        "typeString": "struct Types.MutableUint"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 20402,
                        "name": "Types.MutableUint",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 25204,
                        "src": "8053:17:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_MutableUint_$25204_storage_ptr",
                          "typeString": "struct Types.MutableUint"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 20404,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "8053:27:70"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 20412,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 20405,
                        "name": "_a",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20403,
                        "src": "8087:2:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_MutableUint_$25204_memory_ptr",
                          "typeString": "struct Types.MutableUint memory"
                        }
                      },
                      "id": 20407,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "pre",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 25201,
                      "src": "8087:6:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 20409,
                          "name": "_account",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 20389,
                          "src": "8111:8:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 20410,
                          "name": "_spender",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 20391,
                          "src": "8121:8:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 20408,
                        "name": "read_allowance",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20088,
                        "src": "8096:14:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$returns$_t_uint256_$",
                          "typeString": "function (address,address) view returns (uint256)"
                        }
                      },
                      "id": 20411,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "8096:34:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "8087:43:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 20413,
                  "nodeType": "ExpressionStatement",
                  "src": "8087:43:70"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 20423,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 20417,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 20414,
                              "name": "_a",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 20403,
                              "src": "8142:2:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_MutableUint_$25204_memory_ptr",
                                "typeString": "struct Types.MutableUint memory"
                              }
                            },
                            "id": 20415,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "pre",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 25201,
                            "src": "8142:6:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 20416,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "8151:1:70",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "8142:10:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        }
                      ],
                      "id": 20418,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "8141:12:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 20421,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 20419,
                            "name": "_amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20393,
                            "src": "8158:7:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 20420,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "8168:1:70",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "8158:11:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        }
                      ],
                      "id": 20422,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "8157:13:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "8141:29:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 20443,
                    "nodeType": "Block",
                    "src": "8201:112:70",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 20432,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 20428,
                              "name": "_a",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 20403,
                              "src": "8209:2:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_MutableUint_$25204_memory_ptr",
                                "typeString": "struct Types.MutableUint memory"
                              }
                            },
                            "id": 20430,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "post",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 25203,
                            "src": "8209:7:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 20431,
                            "name": "_amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20393,
                            "src": "8219:7:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "8209:17:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 20433,
                        "nodeType": "ExpressionStatement",
                        "src": "8209:17:70"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 20441,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 20434,
                            "name": "_success",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20398,
                            "src": "8234:8:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 20436,
                                "name": "_account",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 20389,
                                "src": "8278:8:70",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 20437,
                                "name": "_spender",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 20391,
                                "src": "8288:8:70",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 20438,
                                  "name": "_a",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 20403,
                                  "src": "8298:2:70",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_MutableUint_$25204_memory_ptr",
                                    "typeString": "struct Types.MutableUint memory"
                                  }
                                },
                                "id": 20439,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "post",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 25203,
                                "src": "8298:7:70",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 20435,
                              "name": "update_account_spender_allowance",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 21071,
                              "src": "8245:32:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$",
                                "typeString": "function (address,address,uint256) returns (bool)"
                              }
                            },
                            "id": 20440,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "8245:61:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "8234:72:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 20442,
                        "nodeType": "ExpressionStatement",
                        "src": "8234:72:70"
                      }
                    ]
                  },
                  "id": 20444,
                  "nodeType": "IfStatement",
                  "src": "8137:176:70",
                  "trueBody": {
                    "id": 20427,
                    "nodeType": "Block",
                    "src": "8172:23:70",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 20424,
                            "name": "revert",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              26187,
                              26188
                            ],
                            "referencedDeclaration": 26187,
                            "src": "8180:6:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_revert_pure$__$returns$__$",
                              "typeString": "function () pure"
                            }
                          },
                          "id": 20425,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8180:8:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 20426,
                        "nodeType": "ExpressionStatement",
                        "src": "8180:8:70"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": null,
            "id": 20446,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [],
                "id": 20396,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 20395,
                  "name": "if_dgx_interactive",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 19821,
                  "src": "7996:18:70",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "7996:20:70"
              }
            ],
            "name": "put_approve",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 20394,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20389,
                  "name": "_account",
                  "nodeType": "VariableDeclaration",
                  "scope": 20446,
                  "src": "7917:16:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 20388,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7917:7:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 20391,
                  "name": "_spender",
                  "nodeType": "VariableDeclaration",
                  "scope": 20446,
                  "src": "7939:16:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 20390,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7939:7:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 20393,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 20446,
                  "src": "7961:15:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 20392,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7961:7:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7911:69:70"
            },
            "payable": false,
            "returnParameters": {
              "id": 20399,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20398,
                  "name": "_success",
                  "nodeType": "VariableDeclaration",
                  "scope": 20446,
                  "src": "8030:13:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 20397,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "8030:4:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8029:15:70"
            },
            "scope": 21192,
            "src": "7891:426:70",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 20483,
              "nodeType": "Block",
              "src": "8499:162:70",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 20467,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 20459,
                              "name": "system",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 19681,
                              "src": "8505:6:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_System_$19679_storage",
                                "typeString": "struct DummyDGXStorage.System storage ref"
                              }
                            },
                            "id": 20462,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "users",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 19678,
                            "src": "8505:12:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_struct$_User_$19668_storage_$",
                              "typeString": "mapping(address => struct DummyDGXStorage.User storage ref)"
                            }
                          },
                          "id": 20463,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 20461,
                            "name": "_user",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20448,
                            "src": "8518:5:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "8505:19:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_User_$19668_storage",
                            "typeString": "struct DummyDGXStorage.User storage ref"
                          }
                        },
                        "id": 20464,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "config",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 19665,
                        "src": "8505:26:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_UserConfig_$19654_storage",
                          "typeString": "struct DummyDGXStorage.UserConfig storage ref"
                        }
                      },
                      "id": 20465,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "no_demurrage_fee",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 19651,
                      "src": "8505:43:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 20466,
                      "name": "_no_demurrage_fee",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20450,
                      "src": "8551:17:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "8505:63:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 20468,
                  "nodeType": "ExpressionStatement",
                  "src": "8505:63:70"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 20477,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 20469,
                              "name": "system",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 19681,
                              "src": "8574:6:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_System_$19679_storage",
                                "typeString": "struct DummyDGXStorage.System storage ref"
                              }
                            },
                            "id": 20472,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "users",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 19678,
                            "src": "8574:12:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_struct$_User_$19668_storage_$",
                              "typeString": "mapping(address => struct DummyDGXStorage.User storage ref)"
                            }
                          },
                          "id": 20473,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 20471,
                            "name": "_user",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20448,
                            "src": "8587:5:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "8574:19:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_User_$19668_storage",
                            "typeString": "struct DummyDGXStorage.User storage ref"
                          }
                        },
                        "id": 20474,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "config",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 19665,
                        "src": "8574:26:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_UserConfig_$19654_storage",
                          "typeString": "struct DummyDGXStorage.UserConfig storage ref"
                        }
                      },
                      "id": 20475,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "no_transfer_fee",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 19653,
                      "src": "8574:42:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 20476,
                      "name": "_no_transfer_fee",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20452,
                      "src": "8619:16:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "8574:61:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 20478,
                  "nodeType": "ExpressionStatement",
                  "src": "8574:61:70"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 20481,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 20479,
                      "name": "_success",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20457,
                      "src": "8641:8:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "74727565",
                      "id": 20480,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "8652:4:70",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "true"
                    },
                    "src": "8641:15:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 20482,
                  "nodeType": "ExpressionStatement",
                  "src": "8641:15:70"
                }
              ]
            },
            "documentation": null,
            "id": 20484,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [],
                "id": 20455,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 20454,
                  "name": "if_dgx_interactive",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 19821,
                  "src": "8448:18:70",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "8448:20:70"
              }
            ],
            "name": "update_user_fees_configs",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 20453,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20448,
                  "name": "_user",
                  "nodeType": "VariableDeclaration",
                  "scope": 20484,
                  "src": "8360:13:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 20447,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8360:7:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 20450,
                  "name": "_no_demurrage_fee",
                  "nodeType": "VariableDeclaration",
                  "scope": 20484,
                  "src": "8379:22:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 20449,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "8379:4:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 20452,
                  "name": "_no_transfer_fee",
                  "nodeType": "VariableDeclaration",
                  "scope": 20484,
                  "src": "8407:21:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 20451,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "8407:4:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8354:78:70"
            },
            "payable": false,
            "returnParameters": {
              "id": 20458,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20457,
                  "name": "_success",
                  "nodeType": "VariableDeclaration",
                  "scope": 20484,
                  "src": "8482:13:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 20456,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "8482:4:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8481:15:70"
            },
            "scope": 21192,
            "src": "8321:340:70",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 20515,
              "nodeType": "Block",
              "src": "8925:114:70",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 20503,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 20495,
                              "name": "system",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 19681,
                              "src": "8931:6:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_System_$19679_storage",
                                "typeString": "struct DummyDGXStorage.System storage ref"
                              }
                            },
                            "id": 20498,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "users",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 19678,
                            "src": "8931:12:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_struct$_User_$19668_storage_$",
                              "typeString": "mapping(address => struct DummyDGXStorage.User storage ref)"
                            }
                          },
                          "id": 20499,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 20497,
                            "name": "_for",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20486,
                            "src": "8944:4:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "8931:18:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_User_$19668_storage",
                            "typeString": "struct DummyDGXStorage.User storage ref"
                          }
                        },
                        "id": 20500,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "data",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 19667,
                        "src": "8931:23:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_UserData_$19663_storage",
                          "typeString": "struct DummyDGXStorage.UserData storage ref"
                        }
                      },
                      "id": 20501,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "raw_balance",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 19658,
                      "src": "8931:35:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "+=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 20502,
                      "name": "_amount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20488,
                      "src": "8970:7:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "8931:46:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 20504,
                  "nodeType": "ExpressionStatement",
                  "src": "8931:46:70"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 20509,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 20505,
                        "name": "system",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 19681,
                        "src": "8983:6:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_System_$19679_storage",
                          "typeString": "struct DummyDGXStorage.System storage ref"
                        }
                      },
                      "id": 20507,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "total_supply",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 19674,
                      "src": "8983:19:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "+=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 20508,
                      "name": "_amount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20488,
                      "src": "9006:7:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "8983:30:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 20510,
                  "nodeType": "ExpressionStatement",
                  "src": "8983:30:70"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 20513,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 20511,
                      "name": "_success",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20493,
                      "src": "9019:8:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "74727565",
                      "id": 20512,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "9030:4:70",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "true"
                    },
                    "src": "9019:15:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 20514,
                  "nodeType": "ExpressionStatement",
                  "src": "9019:15:70"
                }
              ]
            },
            "documentation": null,
            "id": 20516,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [],
                "id": 20491,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 20490,
                  "name": "if_dgx_interactive",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 19821,
                  "src": "8874:18:70",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "8874:20:70"
              }
            ],
            "name": "mint_dgx_for",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 20489,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20486,
                  "name": "_for",
                  "nodeType": "VariableDeclaration",
                  "scope": 20516,
                  "src": "8821:12:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 20485,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8821:7:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 20488,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 20516,
                  "src": "8839:15:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 20487,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8839:7:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8815:43:70"
            },
            "payable": false,
            "returnParameters": {
              "id": 20494,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20493,
                  "name": "_success",
                  "nodeType": "VariableDeclaration",
                  "scope": 20516,
                  "src": "8908:13:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 20492,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "8908:4:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8907:15:70"
            },
            "scope": 21192,
            "src": "8794:245:70",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 20546,
              "nodeType": "Block",
              "src": "9323:105:70",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 20540,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 20527,
                              "name": "system",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 19681,
                              "src": "9329:6:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_System_$19679_storage",
                                "typeString": "struct DummyDGXStorage.System storage ref"
                              }
                            },
                            "id": 20530,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "users",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 19678,
                            "src": "9329:12:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_struct$_User_$19668_storage_$",
                              "typeString": "mapping(address => struct DummyDGXStorage.User storage ref)"
                            }
                          },
                          "id": 20531,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 20529,
                            "name": "_of",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20518,
                            "src": "9342:3:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "9329:17:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_User_$19668_storage",
                            "typeString": "struct DummyDGXStorage.User storage ref"
                          }
                        },
                        "id": 20532,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "data",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 19667,
                        "src": "9329:22:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_UserData_$19663_storage",
                          "typeString": "struct DummyDGXStorage.UserData storage ref"
                        }
                      },
                      "id": 20533,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "last_payment_date",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 19656,
                      "src": "9329:40:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 20539,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 20534,
                        "name": "now",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 26184,
                        "src": "9372:3:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "-",
                      "rightExpression": {
                        "argumentTypes": null,
                        "components": [
                          {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 20537,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "id": 20535,
                              "name": "_byMinutes",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 20520,
                              "src": "9379:10:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "*",
                            "rightExpression": {
                              "argumentTypes": null,
                              "hexValue": "31",
                              "id": 20536,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "9392:9:70",
                              "subdenomination": "minutes",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_60_by_1",
                                "typeString": "int_const 60"
                              },
                              "value": "1"
                            },
                            "src": "9379:22:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "id": 20538,
                        "isConstant": false,
                        "isInlineArray": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "TupleExpression",
                        "src": "9378:24:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "9372:30:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "9329:73:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 20541,
                  "nodeType": "ExpressionStatement",
                  "src": "9329:73:70"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 20544,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 20542,
                      "name": "_success",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20525,
                      "src": "9408:8:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "74727565",
                      "id": 20543,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "9419:4:70",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "true"
                    },
                    "src": "9408:15:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 20545,
                  "nodeType": "ExpressionStatement",
                  "src": "9408:15:70"
                }
              ]
            },
            "documentation": null,
            "id": 20547,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [],
                "id": 20523,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 20522,
                  "name": "if_dgx_interactive",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 19821,
                  "src": "9272:18:70",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "9272:20:70"
              }
            ],
            "name": "modify_last_payment_date",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 20521,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20518,
                  "name": "_of",
                  "nodeType": "VariableDeclaration",
                  "scope": 20547,
                  "src": "9217:11:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 20517,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "9217:7:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 20520,
                  "name": "_byMinutes",
                  "nodeType": "VariableDeclaration",
                  "scope": 20547,
                  "src": "9234:18:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 20519,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9234:7:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9211:45:70"
            },
            "payable": false,
            "returnParameters": {
              "id": 20526,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20525,
                  "name": "_success",
                  "nodeType": "VariableDeclaration",
                  "scope": 20547,
                  "src": "9306:13:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 20524,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "9306:4:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9305:15:70"
            },
            "scope": 21192,
            "src": "9178:250:70",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 20604,
              "nodeType": "Block",
              "src": "9636:387:70",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 20573,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 20554,
                                "name": "_demurrage",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 20552,
                                "src": "9650:10:70",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Demurrage_$21240_memory_ptr",
                                  "typeString": "struct DemurrageStructs.Demurrage memory"
                                }
                              },
                              "id": 20558,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "config",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 21235,
                              "src": "9650:17:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Config_$21233_memory",
                                "typeString": "struct DemurrageStructs.Config memory"
                              }
                            },
                            "id": 20559,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "collector_balance",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 21226,
                            "src": "9650:35:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                              "typeString": "struct Types.MutableUint memory"
                            }
                          },
                          "id": 20560,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "memberName": "pre",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 25201,
                          "src": "9650:39:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 20561,
                              "name": "_demurrage",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 20552,
                              "src": "9697:10:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Demurrage_$21240_memory_ptr",
                                "typeString": "struct DemurrageStructs.Demurrage memory"
                              }
                            },
                            "id": 20562,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "config",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 21235,
                            "src": "9697:17:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Config_$21233_memory",
                              "typeString": "struct DemurrageStructs.Config memory"
                            }
                          },
                          "id": 20563,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "memberName": "base",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 21228,
                          "src": "9697:22:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 20564,
                              "name": "_demurrage",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 20552,
                              "src": "9727:10:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Demurrage_$21240_memory_ptr",
                                "typeString": "struct DemurrageStructs.Demurrage memory"
                              }
                            },
                            "id": 20565,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "config",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 21235,
                            "src": "9727:17:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Config_$21233_memory",
                              "typeString": "struct DemurrageStructs.Config memory"
                            }
                          },
                          "id": 20566,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "memberName": "rate",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 21230,
                          "src": "9727:22:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 20567,
                              "name": "_demurrage",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 20552,
                              "src": "9757:10:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Demurrage_$21240_memory_ptr",
                                "typeString": "struct DemurrageStructs.Demurrage memory"
                              }
                            },
                            "id": 20568,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "config",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 21235,
                            "src": "9757:17:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Config_$21233_memory",
                              "typeString": "struct DemurrageStructs.Config memory"
                            }
                          },
                          "id": 20569,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "memberName": "collector",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 21232,
                          "src": "9757:27:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "id": 20570,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "TupleExpression",
                      "src": "9642:148:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_address_$",
                        "typeString": "tuple(uint256,uint256,uint256,address)"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 20571,
                        "name": "read_demurrage_config",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 19884,
                        "src": "9793:21:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$_t_uint256_$_t_uint256_$_t_address_$",
                          "typeString": "function () view returns (uint256,uint256,uint256,address)"
                        }
                      },
                      "id": 20572,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "9793:23:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_address_$",
                        "typeString": "tuple(uint256,uint256,uint256,address)"
                      }
                    },
                    "src": "9642:174:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 20574,
                  "nodeType": "ExpressionStatement",
                  "src": "9642:174:70"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 20581,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 20575,
                          "name": "_demurrage",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 20552,
                          "src": "9822:10:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Demurrage_$21240_memory_ptr",
                            "typeString": "struct DemurrageStructs.Demurrage memory"
                          }
                        },
                        "id": 20578,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "user",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 21237,
                        "src": "9822:15:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_User_$21224_memory",
                          "typeString": "struct DemurrageStructs.User memory"
                        }
                      },
                      "id": 20579,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "account",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 21217,
                      "src": "9822:23:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 20580,
                      "name": "_user",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20549,
                      "src": "9848:5:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "9822:31:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 20582,
                  "nodeType": "ExpressionStatement",
                  "src": "9822:31:70"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 20602,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 20583,
                                "name": "_demurrage",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 20552,
                                "src": "9867:10:70",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Demurrage_$21240_memory_ptr",
                                  "typeString": "struct DemurrageStructs.Demurrage memory"
                                }
                              },
                              "id": 20587,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "user",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 21237,
                              "src": "9867:15:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_User_$21224_memory",
                                "typeString": "struct DemurrageStructs.User memory"
                              }
                            },
                            "id": 20588,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "balance",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 21221,
                            "src": "9867:23:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                              "typeString": "struct Types.MutableUint memory"
                            }
                          },
                          "id": 20589,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "memberName": "pre",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 25201,
                          "src": "9867:27:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 20590,
                                  "name": "_demurrage",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 20552,
                                  "src": "9902:10:70",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Demurrage_$21240_memory_ptr",
                                    "typeString": "struct DemurrageStructs.Demurrage memory"
                                  }
                                },
                                "id": 20591,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "user",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 21237,
                                "src": "9902:15:70",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_User_$21224_memory",
                                  "typeString": "struct DemurrageStructs.User memory"
                                }
                              },
                              "id": 20592,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "payment_date",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 21223,
                              "src": "9902:28:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_MutableTimestamp_$25209_memory",
                                "typeString": "struct Types.MutableTimestamp memory"
                              }
                            },
                            "id": 20593,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "time",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 25206,
                            "src": "9902:33:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                              "typeString": "struct Types.MutableUint memory"
                            }
                          },
                          "id": 20594,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "memberName": "pre",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 25201,
                          "src": "9902:37:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 20595,
                              "name": "_demurrage",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 20552,
                              "src": "9947:10:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Demurrage_$21240_memory_ptr",
                                "typeString": "struct DemurrageStructs.Demurrage memory"
                              }
                            },
                            "id": 20596,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "user",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 21237,
                            "src": "9947:15:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_User_$21224_memory",
                              "typeString": "struct DemurrageStructs.User memory"
                            }
                          },
                          "id": 20597,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "memberName": "no_demurrage_fee",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 21219,
                          "src": "9947:32:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        }
                      ],
                      "id": 20598,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "TupleExpression",
                      "src": "9859:126:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_bool_$",
                        "typeString": "tuple(uint256,uint256,bool)"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 20600,
                          "name": "_user",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 20549,
                          "src": "10012:5:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 20599,
                        "name": "read_user_for_demurrage",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20056,
                        "src": "9988:23:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$_t_uint256_$_t_bool_$",
                          "typeString": "function (address) view returns (uint256,uint256,bool)"
                        }
                      },
                      "id": 20601,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "9988:30:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_bool_$",
                        "typeString": "tuple(uint256,uint256,bool)"
                      }
                    },
                    "src": "9859:159:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 20603,
                  "nodeType": "ExpressionStatement",
                  "src": "9859:159:70"
                }
              ]
            },
            "documentation": "///////////////////////// PRIVATE FUNCTIONS //////////////////////////////",
            "id": 20605,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "get_demurraged_data",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 20550,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20549,
                  "name": "_user",
                  "nodeType": "VariableDeclaration",
                  "scope": 20605,
                  "src": "9542:13:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 20548,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "9542:7:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9541:15:70"
            },
            "payable": false,
            "returnParameters": {
              "id": 20553,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20552,
                  "name": "_demurrage",
                  "nodeType": "VariableDeclaration",
                  "scope": 20605,
                  "src": "9595:37:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Demurrage_$21240_memory_ptr",
                    "typeString": "struct DemurrageStructs.Demurrage"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 20551,
                    "name": "DemurrageStructs.Demurrage",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21240,
                    "src": "9595:26:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Demurrage_$21240_storage_ptr",
                      "typeString": "struct DemurrageStructs.Demurrage"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9594:39:70"
            },
            "scope": 21192,
            "src": "9513:510:70",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "private"
          },
          {
            "body": {
              "id": 20790,
              "nodeType": "Block",
              "src": "10182:1230:70",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 20618,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 20612,
                              "name": "_demurrage",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 20607,
                              "src": "10192:10:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Demurrage_$21240_memory_ptr",
                                "typeString": "struct DemurrageStructs.Demurrage memory"
                              }
                            },
                            "id": 20613,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "user",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 21237,
                            "src": "10192:15:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_User_$21224_memory",
                              "typeString": "struct DemurrageStructs.User memory"
                            }
                          },
                          "id": 20614,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "payment_date",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 21223,
                          "src": "10192:28:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_MutableTimestamp_$25209_memory",
                            "typeString": "struct Types.MutableTimestamp memory"
                          }
                        },
                        "id": 20615,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "time",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 25206,
                        "src": "10192:33:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                          "typeString": "struct Types.MutableUint memory"
                        }
                      },
                      "id": 20616,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "pre",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 25201,
                      "src": "10192:37:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 20617,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "10233:1:70",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "10192:42:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 20632,
                  "nodeType": "IfStatement",
                  "src": "10188:106:70",
                  "trueBody": {
                    "id": 20631,
                    "nodeType": "Block",
                    "src": "10236:58:70",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 20629,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 20619,
                                    "name": "_demurrage",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 20607,
                                    "src": "10244:10:70",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Demurrage_$21240_memory_ptr",
                                      "typeString": "struct DemurrageStructs.Demurrage memory"
                                    }
                                  },
                                  "id": 20624,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "user",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 21237,
                                  "src": "10244:15:70",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_User_$21224_memory",
                                    "typeString": "struct DemurrageStructs.User memory"
                                  }
                                },
                                "id": 20625,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "payment_date",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 21223,
                                "src": "10244:28:70",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_MutableTimestamp_$25209_memory",
                                  "typeString": "struct Types.MutableTimestamp memory"
                                }
                              },
                              "id": 20626,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "time",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 25206,
                              "src": "10244:33:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                                "typeString": "struct Types.MutableUint memory"
                              }
                            },
                            "id": 20627,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "pre",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 25201,
                            "src": "10244:37:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 20628,
                            "name": "now",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 26184,
                            "src": "10284:3:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "10244:43:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 20630,
                        "nodeType": "ExpressionStatement",
                        "src": "10244:43:70"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 20645,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "id": 20637,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 20633,
                            "name": "_demurrage",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20607,
                            "src": "10362:10:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Demurrage_$21240_memory_ptr",
                              "typeString": "struct DemurrageStructs.Demurrage memory"
                            }
                          },
                          "id": 20634,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "user",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 21237,
                          "src": "10362:15:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_User_$21224_memory",
                            "typeString": "struct DemurrageStructs.User memory"
                          }
                        },
                        "id": 20635,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "no_demurrage_fee",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 21219,
                        "src": "10362:32:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "74727565",
                        "id": 20636,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "bool",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "10398:4:70",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "value": "true"
                      },
                      "src": "10362:40:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "||",
                    "rightExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "id": 20644,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 20638,
                            "name": "_demurrage",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20607,
                            "src": "10406:10:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Demurrage_$21240_memory_ptr",
                              "typeString": "struct DemurrageStructs.Demurrage memory"
                            }
                          },
                          "id": 20639,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "user",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 21237,
                          "src": "10406:15:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_User_$21224_memory",
                            "typeString": "struct DemurrageStructs.User memory"
                          }
                        },
                        "id": 20640,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "account",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 21217,
                        "src": "10406:23:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 20641,
                            "name": "_demurrage",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20607,
                            "src": "10433:10:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Demurrage_$21240_memory_ptr",
                              "typeString": "struct DemurrageStructs.Demurrage memory"
                            }
                          },
                          "id": 20642,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "config",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 21235,
                          "src": "10433:17:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Config_$21233_memory",
                            "typeString": "struct DemurrageStructs.Config memory"
                          }
                        },
                        "id": 20643,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "collector",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 21232,
                        "src": "10433:27:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "src": "10406:54:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "10362:98:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 20784,
                    "nodeType": "Block",
                    "src": "10683:695:70",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 20696,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 20685,
                                "name": "_demurrage",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 20607,
                                "src": "10691:10:70",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Demurrage_$21240_memory_ptr",
                                  "typeString": "struct DemurrageStructs.Demurrage memory"
                                }
                              },
                              "id": 20688,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "user",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 21237,
                              "src": "10691:15:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_User_$21224_memory",
                                "typeString": "struct DemurrageStructs.User memory"
                              }
                            },
                            "id": 20689,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "payment_date",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 21223,
                            "src": "10691:28:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_MutableTimestamp_$25209_memory",
                              "typeString": "struct Types.MutableTimestamp memory"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "31",
                                "id": 20694,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "10762:6:70",
                                "subdenomination": "days",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_86400_by_1",
                                  "typeString": "int_const 86400"
                                },
                                "value": "1"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_86400_by_1",
                                  "typeString": "int_const 86400"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 20690,
                                    "name": "_demurrage",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 20607,
                                    "src": "10722:10:70",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Demurrage_$21240_memory_ptr",
                                      "typeString": "struct DemurrageStructs.Demurrage memory"
                                    }
                                  },
                                  "id": 20691,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "user",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 21237,
                                  "src": "10722:15:70",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_User_$21224_memory",
                                    "typeString": "struct DemurrageStructs.User memory"
                                  }
                                },
                                "id": 20692,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "payment_date",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 21223,
                                "src": "10722:28:70",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_MutableTimestamp_$25209_memory",
                                  "typeString": "struct Types.MutableTimestamp memory"
                                }
                              },
                              "id": 20693,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "advance_by",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 25281,
                              "src": "10722:39:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_struct$_MutableTimestamp_$25209_memory_ptr_$_t_uint256_$returns$_t_struct$_MutableTimestamp_$25209_memory_ptr_$bound_to$_t_struct$_MutableTimestamp_$25209_memory_ptr_$",
                                "typeString": "function (struct Types.MutableTimestamp memory,uint256) view returns (struct Types.MutableTimestamp memory)"
                              }
                            },
                            "id": 20695,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "10722:47:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_MutableTimestamp_$25209_memory_ptr",
                              "typeString": "struct Types.MutableTimestamp memory"
                            }
                          },
                          "src": "10691:78:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_MutableTimestamp_$25209_memory",
                            "typeString": "struct Types.MutableTimestamp memory"
                          }
                        },
                        "id": 20697,
                        "nodeType": "ExpressionStatement",
                        "src": "10691:78:70"
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 20703,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 20698,
                                  "name": "_demurrage",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 20607,
                                  "src": "10781:10:70",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Demurrage_$21240_memory_ptr",
                                    "typeString": "struct DemurrageStructs.Demurrage memory"
                                  }
                                },
                                "id": 20699,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "user",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 21237,
                                "src": "10781:15:70",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_User_$21224_memory",
                                  "typeString": "struct DemurrageStructs.User memory"
                                }
                              },
                              "id": 20700,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "payment_date",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 21223,
                              "src": "10781:28:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_MutableTimestamp_$25209_memory",
                                "typeString": "struct Types.MutableTimestamp memory"
                              }
                            },
                            "id": 20701,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "in_units",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 25208,
                            "src": "10781:37:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 20702,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "10822:1:70",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "10781:42:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 20782,
                          "nodeType": "Block",
                          "src": "11000:372:70",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 20752,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 20731,
                                    "name": "_demurrage",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 20607,
                                    "src": "11010:10:70",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Demurrage_$21240_memory_ptr",
                                      "typeString": "struct DemurrageStructs.Demurrage memory"
                                    }
                                  },
                                  "id": 20733,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "memberName": "collected_fee",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 21239,
                                  "src": "11010:24:70",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 20751,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "components": [
                                      {
                                        "argumentTypes": null,
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 20746,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "argumentTypes": null,
                                          "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          "id": 20742,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "leftExpression": {
                                            "argumentTypes": null,
                                            "expression": {
                                              "argumentTypes": null,
                                              "expression": {
                                                "argumentTypes": null,
                                                "expression": {
                                                  "argumentTypes": null,
                                                  "id": 20734,
                                                  "name": "_demurrage",
                                                  "nodeType": "Identifier",
                                                  "overloadedDeclarations": [],
                                                  "referencedDeclaration": 20607,
                                                  "src": "11038:10:70",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_Demurrage_$21240_memory_ptr",
                                                    "typeString": "struct DemurrageStructs.Demurrage memory"
                                                  }
                                                },
                                                "id": 20735,
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "user",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 21237,
                                                "src": "11038:15:70",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_struct$_User_$21224_memory",
                                                  "typeString": "struct DemurrageStructs.User memory"
                                                }
                                              },
                                              "id": 20736,
                                              "isConstant": false,
                                              "isLValue": true,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "memberName": "payment_date",
                                              "nodeType": "MemberAccess",
                                              "referencedDeclaration": 21223,
                                              "src": "11038:28:70",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_MutableTimestamp_$25209_memory",
                                                "typeString": "struct Types.MutableTimestamp memory"
                                              }
                                            },
                                            "id": 20737,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "in_units",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 25208,
                                            "src": "11038:37:70",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "nodeType": "BinaryOperation",
                                          "operator": "*",
                                          "rightExpression": {
                                            "argumentTypes": null,
                                            "expression": {
                                              "argumentTypes": null,
                                              "expression": {
                                                "argumentTypes": null,
                                                "expression": {
                                                  "argumentTypes": null,
                                                  "id": 20738,
                                                  "name": "_demurrage",
                                                  "nodeType": "Identifier",
                                                  "overloadedDeclarations": [],
                                                  "referencedDeclaration": 20607,
                                                  "src": "11078:10:70",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_Demurrage_$21240_memory_ptr",
                                                    "typeString": "struct DemurrageStructs.Demurrage memory"
                                                  }
                                                },
                                                "id": 20739,
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "user",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 21237,
                                                "src": "11078:15:70",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_struct$_User_$21224_memory",
                                                  "typeString": "struct DemurrageStructs.User memory"
                                                }
                                              },
                                              "id": 20740,
                                              "isConstant": false,
                                              "isLValue": true,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "memberName": "balance",
                                              "nodeType": "MemberAccess",
                                              "referencedDeclaration": 21221,
                                              "src": "11078:23:70",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                                                "typeString": "struct Types.MutableUint memory"
                                              }
                                            },
                                            "id": 20741,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "pre",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 25201,
                                            "src": "11078:27:70",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "src": "11038:67:70",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "*",
                                        "rightExpression": {
                                          "argumentTypes": null,
                                          "expression": {
                                            "argumentTypes": null,
                                            "expression": {
                                              "argumentTypes": null,
                                              "id": 20743,
                                              "name": "_demurrage",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 20607,
                                              "src": "11108:10:70",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_Demurrage_$21240_memory_ptr",
                                                "typeString": "struct DemurrageStructs.Demurrage memory"
                                              }
                                            },
                                            "id": 20744,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "config",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 21235,
                                            "src": "11108:17:70",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_struct$_Config_$21233_memory",
                                              "typeString": "struct DemurrageStructs.Config memory"
                                            }
                                          },
                                          "id": 20745,
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "rate",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 21230,
                                          "src": "11108:22:70",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "src": "11038:92:70",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "id": 20747,
                                    "isConstant": false,
                                    "isInlineArray": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "TupleExpression",
                                    "src": "11037:94:70",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "/",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 20748,
                                        "name": "_demurrage",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 20607,
                                        "src": "11134:10:70",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_Demurrage_$21240_memory_ptr",
                                          "typeString": "struct DemurrageStructs.Demurrage memory"
                                        }
                                      },
                                      "id": 20749,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "config",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 21235,
                                      "src": "11134:17:70",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_Config_$21233_memory",
                                        "typeString": "struct DemurrageStructs.Config memory"
                                      }
                                    },
                                    "id": 20750,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "base",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 21228,
                                    "src": "11134:22:70",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "11037:119:70",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "11010:146:70",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 20753,
                              "nodeType": "ExpressionStatement",
                              "src": "11010:146:70"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 20766,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 20754,
                                      "name": "_demurrage",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 20607,
                                      "src": "11166:10:70",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_Demurrage_$21240_memory_ptr",
                                        "typeString": "struct DemurrageStructs.Demurrage memory"
                                      }
                                    },
                                    "id": 20757,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "user",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 21237,
                                    "src": "11166:15:70",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_User_$21224_memory",
                                      "typeString": "struct DemurrageStructs.User memory"
                                    }
                                  },
                                  "id": 20758,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "memberName": "balance",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 21221,
                                  "src": "11166:23:70",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                                    "typeString": "struct Types.MutableUint memory"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 20763,
                                        "name": "_demurrage",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 20607,
                                        "src": "11225:10:70",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_Demurrage_$21240_memory_ptr",
                                          "typeString": "struct DemurrageStructs.Demurrage memory"
                                        }
                                      },
                                      "id": 20764,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "collected_fee",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 21239,
                                      "src": "11225:24:70",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": null,
                                      "expression": {
                                        "argumentTypes": null,
                                        "expression": {
                                          "argumentTypes": null,
                                          "id": 20759,
                                          "name": "_demurrage",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 20607,
                                          "src": "11192:10:70",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_Demurrage_$21240_memory_ptr",
                                            "typeString": "struct DemurrageStructs.Demurrage memory"
                                          }
                                        },
                                        "id": 20760,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "user",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 21237,
                                        "src": "11192:15:70",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_User_$21224_memory",
                                          "typeString": "struct DemurrageStructs.User memory"
                                        }
                                      },
                                      "id": 20761,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "balance",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 21221,
                                      "src": "11192:23:70",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                                        "typeString": "struct Types.MutableUint memory"
                                      }
                                    },
                                    "id": 20762,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "subtract",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 25482,
                                    "src": "11192:32:70",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_struct$_MutableUint_$25204_memory_ptr_$_t_uint256_$returns$_t_struct$_MutableUint_$25204_memory_ptr_$bound_to$_t_struct$_MutableUint_$25204_memory_ptr_$",
                                      "typeString": "function (struct Types.MutableUint memory,uint256) pure returns (struct Types.MutableUint memory)"
                                    }
                                  },
                                  "id": 20765,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "11192:58:70",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_MutableUint_$25204_memory_ptr",
                                    "typeString": "struct Types.MutableUint memory"
                                  }
                                },
                                "src": "11166:84:70",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                                  "typeString": "struct Types.MutableUint memory"
                                }
                              },
                              "id": 20767,
                              "nodeType": "ExpressionStatement",
                              "src": "11166:84:70"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 20780,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 20768,
                                      "name": "_demurrage",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 20607,
                                      "src": "11260:10:70",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_Demurrage_$21240_memory_ptr",
                                        "typeString": "struct DemurrageStructs.Demurrage memory"
                                      }
                                    },
                                    "id": 20771,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "config",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 21235,
                                    "src": "11260:17:70",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Config_$21233_memory",
                                      "typeString": "struct DemurrageStructs.Config memory"
                                    }
                                  },
                                  "id": 20772,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "memberName": "collector_balance",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 21226,
                                  "src": "11260:35:70",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                                    "typeString": "struct Types.MutableUint memory"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 20777,
                                        "name": "_demurrage",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 20607,
                                        "src": "11338:10:70",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_Demurrage_$21240_memory_ptr",
                                          "typeString": "struct DemurrageStructs.Demurrage memory"
                                        }
                                      },
                                      "id": 20778,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "collected_fee",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 21239,
                                      "src": "11338:24:70",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": null,
                                      "expression": {
                                        "argumentTypes": null,
                                        "expression": {
                                          "argumentTypes": null,
                                          "id": 20773,
                                          "name": "_demurrage",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 20607,
                                          "src": "11298:10:70",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_Demurrage_$21240_memory_ptr",
                                            "typeString": "struct DemurrageStructs.Demurrage memory"
                                          }
                                        },
                                        "id": 20774,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "config",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 21235,
                                        "src": "11298:17:70",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_Config_$21233_memory",
                                          "typeString": "struct DemurrageStructs.Config memory"
                                        }
                                      },
                                      "id": 20775,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "collector_balance",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 21226,
                                      "src": "11298:35:70",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                                        "typeString": "struct Types.MutableUint memory"
                                      }
                                    },
                                    "id": 20776,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "add",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 25452,
                                    "src": "11298:39:70",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_struct$_MutableUint_$25204_memory_ptr_$_t_uint256_$returns$_t_struct$_MutableUint_$25204_memory_ptr_$bound_to$_t_struct$_MutableUint_$25204_memory_ptr_$",
                                      "typeString": "function (struct Types.MutableUint memory,uint256) pure returns (struct Types.MutableUint memory)"
                                    }
                                  },
                                  "id": 20779,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "11298:65:70",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_MutableUint_$25204_memory_ptr",
                                    "typeString": "struct Types.MutableUint memory"
                                  }
                                },
                                "src": "11260:103:70",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                                  "typeString": "struct Types.MutableUint memory"
                                }
                              },
                              "id": 20781,
                              "nodeType": "ExpressionStatement",
                              "src": "11260:103:70"
                            }
                          ]
                        },
                        "id": 20783,
                        "nodeType": "IfStatement",
                        "src": "10777:595:70",
                        "trueBody": {
                          "id": 20730,
                          "nodeType": "Block",
                          "src": "10825:169:70",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 20715,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 20704,
                                        "name": "_demurrage",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 20607,
                                        "src": "10835:10:70",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_Demurrage_$21240_memory_ptr",
                                          "typeString": "struct DemurrageStructs.Demurrage memory"
                                        }
                                      },
                                      "id": 20708,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "user",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 21237,
                                      "src": "10835:15:70",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_User_$21224_memory",
                                        "typeString": "struct DemurrageStructs.User memory"
                                      }
                                    },
                                    "id": 20709,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "balance",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 21221,
                                    "src": "10835:23:70",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                                      "typeString": "struct Types.MutableUint memory"
                                    }
                                  },
                                  "id": 20710,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "memberName": "post",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 25203,
                                  "src": "10835:28:70",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 20711,
                                        "name": "_demurrage",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 20607,
                                        "src": "10866:10:70",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_Demurrage_$21240_memory_ptr",
                                          "typeString": "struct DemurrageStructs.Demurrage memory"
                                        }
                                      },
                                      "id": 20712,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "user",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 21237,
                                      "src": "10866:15:70",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_User_$21224_memory",
                                        "typeString": "struct DemurrageStructs.User memory"
                                      }
                                    },
                                    "id": 20713,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "balance",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 21221,
                                    "src": "10866:23:70",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                                      "typeString": "struct Types.MutableUint memory"
                                    }
                                  },
                                  "id": 20714,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "pre",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 25201,
                                  "src": "10866:27:70",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "10835:58:70",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 20716,
                              "nodeType": "ExpressionStatement",
                              "src": "10835:58:70"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 20728,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 20717,
                                        "name": "_demurrage",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 20607,
                                        "src": "10903:10:70",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_Demurrage_$21240_memory_ptr",
                                          "typeString": "struct DemurrageStructs.Demurrage memory"
                                        }
                                      },
                                      "id": 20721,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "config",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 21235,
                                      "src": "10903:17:70",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_Config_$21233_memory",
                                        "typeString": "struct DemurrageStructs.Config memory"
                                      }
                                    },
                                    "id": 20722,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "collector_balance",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 21226,
                                    "src": "10903:35:70",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                                      "typeString": "struct Types.MutableUint memory"
                                    }
                                  },
                                  "id": 20723,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "memberName": "post",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 25203,
                                  "src": "10903:40:70",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 20724,
                                        "name": "_demurrage",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 20607,
                                        "src": "10946:10:70",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_Demurrage_$21240_memory_ptr",
                                          "typeString": "struct DemurrageStructs.Demurrage memory"
                                        }
                                      },
                                      "id": 20725,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "config",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 21235,
                                      "src": "10946:17:70",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_Config_$21233_memory",
                                        "typeString": "struct DemurrageStructs.Config memory"
                                      }
                                    },
                                    "id": 20726,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "collector_balance",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 21226,
                                    "src": "10946:35:70",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                                      "typeString": "struct Types.MutableUint memory"
                                    }
                                  },
                                  "id": 20727,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "pre",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 25201,
                                  "src": "10946:39:70",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "10903:82:70",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 20729,
                              "nodeType": "ExpressionStatement",
                              "src": "10903:82:70"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "id": 20785,
                  "nodeType": "IfStatement",
                  "src": "10358:1020:70",
                  "trueBody": {
                    "id": 20684,
                    "nodeType": "Block",
                    "src": "10462:215:70",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 20657,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 20646,
                                  "name": "_demurrage",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 20607,
                                  "src": "10470:10:70",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Demurrage_$21240_memory_ptr",
                                    "typeString": "struct DemurrageStructs.Demurrage memory"
                                  }
                                },
                                "id": 20650,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "user",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 21237,
                                "src": "10470:15:70",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_User_$21224_memory",
                                  "typeString": "struct DemurrageStructs.User memory"
                                }
                              },
                              "id": 20651,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "balance",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 21221,
                              "src": "10470:23:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                                "typeString": "struct Types.MutableUint memory"
                              }
                            },
                            "id": 20652,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "post",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 25203,
                            "src": "10470:28:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 20653,
                                  "name": "_demurrage",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 20607,
                                  "src": "10501:10:70",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Demurrage_$21240_memory_ptr",
                                    "typeString": "struct DemurrageStructs.Demurrage memory"
                                  }
                                },
                                "id": 20654,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "user",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 21237,
                                "src": "10501:15:70",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_User_$21224_memory",
                                  "typeString": "struct DemurrageStructs.User memory"
                                }
                              },
                              "id": 20655,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "balance",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 21221,
                              "src": "10501:23:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                                "typeString": "struct Types.MutableUint memory"
                              }
                            },
                            "id": 20656,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "pre",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 25201,
                            "src": "10501:27:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "10470:58:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 20658,
                        "nodeType": "ExpressionStatement",
                        "src": "10470:58:70"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 20670,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 20659,
                                  "name": "_demurrage",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 20607,
                                  "src": "10536:10:70",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Demurrage_$21240_memory_ptr",
                                    "typeString": "struct DemurrageStructs.Demurrage memory"
                                  }
                                },
                                "id": 20663,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "config",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 21235,
                                "src": "10536:17:70",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Config_$21233_memory",
                                  "typeString": "struct DemurrageStructs.Config memory"
                                }
                              },
                              "id": 20664,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "collector_balance",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 21226,
                              "src": "10536:35:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                                "typeString": "struct Types.MutableUint memory"
                              }
                            },
                            "id": 20665,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "post",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 25203,
                            "src": "10536:40:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 20666,
                                  "name": "_demurrage",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 20607,
                                  "src": "10579:10:70",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Demurrage_$21240_memory_ptr",
                                    "typeString": "struct DemurrageStructs.Demurrage memory"
                                  }
                                },
                                "id": 20667,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "config",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 21235,
                                "src": "10579:17:70",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Config_$21233_memory",
                                  "typeString": "struct DemurrageStructs.Config memory"
                                }
                              },
                              "id": 20668,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "collector_balance",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 21226,
                              "src": "10579:35:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                                "typeString": "struct Types.MutableUint memory"
                              }
                            },
                            "id": 20669,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "pre",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 25201,
                            "src": "10579:39:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "10536:82:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 20671,
                        "nodeType": "ExpressionStatement",
                        "src": "10536:82:70"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 20682,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 20672,
                                    "name": "_demurrage",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 20607,
                                    "src": "10626:10:70",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Demurrage_$21240_memory_ptr",
                                      "typeString": "struct DemurrageStructs.Demurrage memory"
                                    }
                                  },
                                  "id": 20677,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "user",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 21237,
                                  "src": "10626:15:70",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_User_$21224_memory",
                                    "typeString": "struct DemurrageStructs.User memory"
                                  }
                                },
                                "id": 20678,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "payment_date",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 21223,
                                "src": "10626:28:70",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_MutableTimestamp_$25209_memory",
                                  "typeString": "struct Types.MutableTimestamp memory"
                                }
                              },
                              "id": 20679,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "time",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 25206,
                              "src": "10626:33:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                                "typeString": "struct Types.MutableUint memory"
                              }
                            },
                            "id": 20680,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "post",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 25203,
                            "src": "10626:38:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 20681,
                            "name": "now",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 26184,
                            "src": "10667:3:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "10626:44:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 20683,
                        "nodeType": "ExpressionStatement",
                        "src": "10626:44:70"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 20788,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 20786,
                      "name": "_calculated",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20610,
                      "src": "11383:11:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Demurrage_$21240_memory_ptr",
                        "typeString": "struct DemurrageStructs.Demurrage memory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 20787,
                      "name": "_demurrage",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20607,
                      "src": "11397:10:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Demurrage_$21240_memory_ptr",
                        "typeString": "struct DemurrageStructs.Demurrage memory"
                      }
                    },
                    "src": "11383:24:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Demurrage_$21240_memory_ptr",
                      "typeString": "struct DemurrageStructs.Demurrage memory"
                    }
                  },
                  "id": 20789,
                  "nodeType": "ExpressionStatement",
                  "src": "11383:24:70"
                }
              ]
            },
            "documentation": null,
            "id": 20791,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "calculate_demurrage",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 20608,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20607,
                  "name": "_demurrage",
                  "nodeType": "VariableDeclaration",
                  "scope": 20791,
                  "src": "10056:44:70",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Demurrage_$21240_memory_ptr",
                    "typeString": "struct DemurrageStructs.Demurrage"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 20606,
                    "name": "DemurrageStructs.Demurrage",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21240,
                    "src": "10056:26:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Demurrage_$21240_storage_ptr",
                      "typeString": "struct DemurrageStructs.Demurrage"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10055:46:70"
            },
            "payable": false,
            "returnParameters": {
              "id": 20611,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20610,
                  "name": "_calculated",
                  "nodeType": "VariableDeclaration",
                  "scope": 20791,
                  "src": "10140:38:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Demurrage_$21240_memory_ptr",
                    "typeString": "struct DemurrageStructs.Demurrage"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 20609,
                    "name": "DemurrageStructs.Demurrage",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21240,
                    "src": "10140:26:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Demurrage_$21240_storage_ptr",
                      "typeString": "struct DemurrageStructs.Demurrage"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10139:40:70"
            },
            "scope": 21192,
            "src": "10027:1385:70",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "private"
          },
          {
            "body": {
              "id": 20835,
              "nodeType": "Block",
              "src": "11498:353:70",
              "statements": [
                {
                  "assignments": [
                    20801
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 20801,
                      "name": "_demurrage",
                      "nodeType": "VariableDeclaration",
                      "scope": 20836,
                      "src": "11504:44:70",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Demurrage_$21240_memory_ptr",
                        "typeString": "struct DemurrageStructs.Demurrage"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 20800,
                        "name": "DemurrageStructs.Demurrage",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 21240,
                        "src": "11504:26:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Demurrage_$21240_storage_ptr",
                          "typeString": "struct DemurrageStructs.Demurrage"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 20805,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 20803,
                        "name": "_user",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20793,
                        "src": "11571:5:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 20802,
                      "name": "get_demurraged_data",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20605,
                      "src": "11551:19:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_struct$_Demurrage_$21240_memory_ptr_$",
                        "typeString": "function (address) view returns (struct DemurrageStructs.Demurrage memory)"
                      }
                    },
                    "id": 20804,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11551:26:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Demurrage_$21240_memory_ptr",
                      "typeString": "struct DemurrageStructs.Demurrage memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "11504:73:70"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 20810,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 20806,
                      "name": "_demurrage",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20801,
                      "src": "11583:10:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Demurrage_$21240_memory_ptr",
                        "typeString": "struct DemurrageStructs.Demurrage memory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 20808,
                          "name": "_demurrage",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 20801,
                          "src": "11616:10:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Demurrage_$21240_memory_ptr",
                            "typeString": "struct DemurrageStructs.Demurrage memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_struct$_Demurrage_$21240_memory_ptr",
                            "typeString": "struct DemurrageStructs.Demurrage memory"
                          }
                        ],
                        "id": 20807,
                        "name": "calculate_demurrage",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20791,
                        "src": "11596:19:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_struct$_Demurrage_$21240_memory_ptr_$returns$_t_struct$_Demurrage_$21240_memory_ptr_$",
                          "typeString": "function (struct DemurrageStructs.Demurrage memory) view returns (struct DemurrageStructs.Demurrage memory)"
                        }
                      },
                      "id": 20809,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "11596:31:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Demurrage_$21240_memory_ptr",
                        "typeString": "struct DemurrageStructs.Demurrage memory"
                      }
                    },
                    "src": "11583:44:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Demurrage_$21240_memory_ptr",
                      "typeString": "struct DemurrageStructs.Demurrage memory"
                    }
                  },
                  "id": 20811,
                  "nodeType": "ExpressionStatement",
                  "src": "11583:44:70"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 20813,
                            "name": "_demurrage",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20801,
                            "src": "11666:10:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Demurrage_$21240_memory_ptr",
                              "typeString": "struct DemurrageStructs.Demurrage memory"
                            }
                          },
                          "id": 20814,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "user",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 21237,
                          "src": "11666:15:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_User_$21224_memory",
                            "typeString": "struct DemurrageStructs.User memory"
                          }
                        },
                        "id": 20815,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "account",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 21217,
                        "src": "11666:23:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 20816,
                              "name": "_demurrage",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 20801,
                              "src": "11697:10:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Demurrage_$21240_memory_ptr",
                                "typeString": "struct DemurrageStructs.Demurrage memory"
                              }
                            },
                            "id": 20817,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "user",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 21237,
                            "src": "11697:15:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_User_$21224_memory",
                              "typeString": "struct DemurrageStructs.User memory"
                            }
                          },
                          "id": 20818,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "balance",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 21221,
                          "src": "11697:23:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                            "typeString": "struct Types.MutableUint memory"
                          }
                        },
                        "id": 20819,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "post",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 25203,
                        "src": "11697:28:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 20820,
                                "name": "_demurrage",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 20801,
                                "src": "11733:10:70",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Demurrage_$21240_memory_ptr",
                                  "typeString": "struct DemurrageStructs.Demurrage memory"
                                }
                              },
                              "id": 20821,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "user",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 21237,
                              "src": "11733:15:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_User_$21224_memory",
                                "typeString": "struct DemurrageStructs.User memory"
                              }
                            },
                            "id": 20822,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "payment_date",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 21223,
                            "src": "11733:28:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_MutableTimestamp_$25209_memory",
                              "typeString": "struct Types.MutableTimestamp memory"
                            }
                          },
                          "id": 20823,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "time",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 25206,
                          "src": "11733:33:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                            "typeString": "struct Types.MutableUint memory"
                          }
                        },
                        "id": 20824,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "post",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 25203,
                        "src": "11733:38:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 20825,
                              "name": "_demurrage",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 20801,
                              "src": "11779:10:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Demurrage_$21240_memory_ptr",
                                "typeString": "struct DemurrageStructs.Demurrage memory"
                              }
                            },
                            "id": 20826,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "config",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 21235,
                            "src": "11779:17:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Config_$21233_memory",
                              "typeString": "struct DemurrageStructs.Config memory"
                            }
                          },
                          "id": 20827,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "collector_balance",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 21226,
                          "src": "11779:35:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                            "typeString": "struct Types.MutableUint memory"
                          }
                        },
                        "id": 20828,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "post",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 25203,
                        "src": "11779:40:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 20812,
                      "name": "update_user_for_demurrage",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20880,
                      "src": "11633:25:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256,uint256,uint256)"
                      }
                    },
                    "id": 20829,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11633:192:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 20830,
                  "nodeType": "ExpressionStatement",
                  "src": "11633:192:70"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 20833,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 20831,
                      "name": "_success",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20796,
                      "src": "11831:8:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "74727565",
                      "id": 20832,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "11842:4:70",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "true"
                    },
                    "src": "11831:15:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 20834,
                  "nodeType": "ExpressionStatement",
                  "src": "11831:15:70"
                }
              ]
            },
            "documentation": null,
            "id": 20836,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "deduct_demurrage",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 20794,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20793,
                  "name": "_user",
                  "nodeType": "VariableDeclaration",
                  "scope": 20836,
                  "src": "11442:13:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 20792,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "11442:7:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11441:15:70"
            },
            "payable": false,
            "returnParameters": {
              "id": 20797,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20796,
                  "name": "_success",
                  "nodeType": "VariableDeclaration",
                  "scope": 20836,
                  "src": "11481:13:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 20795,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "11481:4:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11480:15:70"
            },
            "scope": 21192,
            "src": "11416:435:70",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 20879,
              "nodeType": "Block",
              "src": "12030:229:70",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 20857,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 20847,
                              "name": "system",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 19681,
                              "src": "12036:6:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_System_$19679_storage",
                                "typeString": "struct DummyDGXStorage.System storage ref"
                              }
                            },
                            "id": 20852,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "users",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 19678,
                            "src": "12036:12:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_struct$_User_$19668_storage_$",
                              "typeString": "mapping(address => struct DummyDGXStorage.User storage ref)"
                            }
                          },
                          "id": 20853,
                          "indexExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 20849,
                                "name": "system",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 19681,
                                "src": "12049:6:70",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_System_$19679_storage",
                                  "typeString": "struct DummyDGXStorage.System storage ref"
                                }
                              },
                              "id": 20850,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "collectors",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 19670,
                              "src": "12049:17:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Collectors_$19649_storage",
                                "typeString": "struct DummyDGXStorage.Collectors storage ref"
                              }
                            },
                            "id": 20851,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "demurrage",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 19646,
                            "src": "12049:27:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "12036:41:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_User_$19668_storage",
                            "typeString": "struct DummyDGXStorage.User storage ref"
                          }
                        },
                        "id": 20854,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "data",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 19667,
                        "src": "12036:46:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_UserData_$19663_storage",
                          "typeString": "struct DummyDGXStorage.UserData storage ref"
                        }
                      },
                      "id": 20855,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "raw_balance",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 19658,
                      "src": "12036:58:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 20856,
                      "name": "_collector_new_balance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20844,
                      "src": "12097:22:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "12036:83:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 20858,
                  "nodeType": "ExpressionStatement",
                  "src": "12036:83:70"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 20867,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 20859,
                              "name": "system",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 19681,
                              "src": "12125:6:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_System_$19679_storage",
                                "typeString": "struct DummyDGXStorage.System storage ref"
                              }
                            },
                            "id": 20862,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "users",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 19678,
                            "src": "12125:12:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_struct$_User_$19668_storage_$",
                              "typeString": "mapping(address => struct DummyDGXStorage.User storage ref)"
                            }
                          },
                          "id": 20863,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 20861,
                            "name": "_user",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20838,
                            "src": "12138:5:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "12125:19:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_User_$19668_storage",
                            "typeString": "struct DummyDGXStorage.User storage ref"
                          }
                        },
                        "id": 20864,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "data",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 19667,
                        "src": "12125:24:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_UserData_$19663_storage",
                          "typeString": "struct DummyDGXStorage.UserData storage ref"
                        }
                      },
                      "id": 20865,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "raw_balance",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 19658,
                      "src": "12125:36:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 20866,
                      "name": "_user_new_balance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20840,
                      "src": "12164:17:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "12125:56:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 20868,
                  "nodeType": "ExpressionStatement",
                  "src": "12125:56:70"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 20877,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 20869,
                              "name": "system",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 19681,
                              "src": "12187:6:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_System_$19679_storage",
                                "typeString": "struct DummyDGXStorage.System storage ref"
                              }
                            },
                            "id": 20872,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "users",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 19678,
                            "src": "12187:12:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_struct$_User_$19668_storage_$",
                              "typeString": "mapping(address => struct DummyDGXStorage.User storage ref)"
                            }
                          },
                          "id": 20873,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 20871,
                            "name": "_user",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20838,
                            "src": "12200:5:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "12187:19:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_User_$19668_storage",
                            "typeString": "struct DummyDGXStorage.User storage ref"
                          }
                        },
                        "id": 20874,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "data",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 19667,
                        "src": "12187:24:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_UserData_$19663_storage",
                          "typeString": "struct DummyDGXStorage.UserData storage ref"
                        }
                      },
                      "id": 20875,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "last_payment_date",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 19656,
                      "src": "12187:42:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 20876,
                      "name": "_user_new_payment_date",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20842,
                      "src": "12232:22:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "12187:67:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 20878,
                  "nodeType": "ExpressionStatement",
                  "src": "12187:67:70"
                }
              ]
            },
            "documentation": null,
            "id": 20880,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "update_user_for_demurrage",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 20845,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20838,
                  "name": "_user",
                  "nodeType": "VariableDeclaration",
                  "scope": 20880,
                  "src": "11895:13:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 20837,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "11895:7:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 20840,
                  "name": "_user_new_balance",
                  "nodeType": "VariableDeclaration",
                  "scope": 20880,
                  "src": "11914:25:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 20839,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "11914:7:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 20842,
                  "name": "_user_new_payment_date",
                  "nodeType": "VariableDeclaration",
                  "scope": 20880,
                  "src": "11945:30:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 20841,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "11945:7:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 20844,
                  "name": "_collector_new_balance",
                  "nodeType": "VariableDeclaration",
                  "scope": 20880,
                  "src": "11981:30:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 20843,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "11981:7:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11889:126:70"
            },
            "payable": false,
            "returnParameters": {
              "id": 20846,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "12030:0:70"
            },
            "scope": 21192,
            "src": "11855:404:70",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "private"
          },
          {
            "body": {
              "id": 20951,
              "nodeType": "Block",
              "src": "12427:421:70",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 20891,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 20887,
                        "name": "_transfer",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20882,
                        "src": "12433:9:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                          "typeString": "struct TransferStructs.Transfer memory"
                        }
                      },
                      "id": 20889,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "fee",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 21289,
                      "src": "12433:13:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 20890,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "12449:1:70",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "12433:17:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 20892,
                  "nodeType": "ExpressionStatement",
                  "src": "12433:17:70"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 20902,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 20893,
                        "name": "_transfer",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20882,
                        "src": "12456:9:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                          "typeString": "struct TransferStructs.Transfer memory"
                        }
                      },
                      "id": 20895,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "received_amount",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 21285,
                      "src": "12456:25:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                        "typeString": "struct Types.MutableUint memory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 20899,
                            "name": "_transfer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20882,
                            "src": "12514:9:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                              "typeString": "struct TransferStructs.Transfer memory"
                            }
                          },
                          "id": 20900,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sent_amount",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 21287,
                          "src": "12514:21:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 20896,
                            "name": "_transfer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20882,
                            "src": "12484:9:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                              "typeString": "struct TransferStructs.Transfer memory"
                            }
                          },
                          "id": 20897,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "received_amount",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 21285,
                          "src": "12484:25:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                            "typeString": "struct Types.MutableUint memory"
                          }
                        },
                        "id": 20898,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "add",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 25452,
                        "src": "12484:29:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_struct$_MutableUint_$25204_memory_ptr_$_t_uint256_$returns$_t_struct$_MutableUint_$25204_memory_ptr_$bound_to$_t_struct$_MutableUint_$25204_memory_ptr_$",
                          "typeString": "function (struct Types.MutableUint memory,uint256) pure returns (struct Types.MutableUint memory)"
                        }
                      },
                      "id": 20901,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "12484:52:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_MutableUint_$25204_memory_ptr",
                        "typeString": "struct Types.MutableUint memory"
                      }
                    },
                    "src": "12456:80:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                      "typeString": "struct Types.MutableUint memory"
                    }
                  },
                  "id": 20903,
                  "nodeType": "ExpressionStatement",
                  "src": "12456:80:70"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 20917,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 20904,
                          "name": "_transfer",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 20882,
                          "src": "12542:9:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                            "typeString": "struct TransferStructs.Transfer memory"
                          }
                        },
                        "id": 20907,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 21277,
                        "src": "12542:16:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_User_$21257_memory",
                          "typeString": "struct TransferStructs.User memory"
                        }
                      },
                      "id": 20908,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "balance",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 21254,
                      "src": "12542:24:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                        "typeString": "struct Types.MutableUint memory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 20913,
                              "name": "_transfer",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 20882,
                              "src": "12603:9:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                                "typeString": "struct TransferStructs.Transfer memory"
                              }
                            },
                            "id": 20914,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "received_amount",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 21285,
                            "src": "12603:25:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                              "typeString": "struct Types.MutableUint memory"
                            }
                          },
                          "id": 20915,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "post",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 25203,
                          "src": "12603:30:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 20909,
                              "name": "_transfer",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 20882,
                              "src": "12569:9:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                                "typeString": "struct TransferStructs.Transfer memory"
                              }
                            },
                            "id": 20910,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 21277,
                            "src": "12569:16:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_User_$21257_memory",
                              "typeString": "struct TransferStructs.User memory"
                            }
                          },
                          "id": 20911,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "balance",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 21254,
                          "src": "12569:24:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                            "typeString": "struct Types.MutableUint memory"
                          }
                        },
                        "id": 20912,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "subtract",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 25482,
                        "src": "12569:33:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_struct$_MutableUint_$25204_memory_ptr_$_t_uint256_$returns$_t_struct$_MutableUint_$25204_memory_ptr_$bound_to$_t_struct$_MutableUint_$25204_memory_ptr_$",
                          "typeString": "function (struct Types.MutableUint memory,uint256) pure returns (struct Types.MutableUint memory)"
                        }
                      },
                      "id": 20916,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "12569:65:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_MutableUint_$25204_memory_ptr",
                        "typeString": "struct Types.MutableUint memory"
                      }
                    },
                    "src": "12542:92:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                      "typeString": "struct Types.MutableUint memory"
                    }
                  },
                  "id": 20918,
                  "nodeType": "ExpressionStatement",
                  "src": "12542:92:70"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 20930,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 20919,
                            "name": "_transfer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20882,
                            "src": "12640:9:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                              "typeString": "struct TransferStructs.Transfer memory"
                            }
                          },
                          "id": 20923,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "config",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 21283,
                          "src": "12640:16:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Config_$21275_memory",
                            "typeString": "struct TransferStructs.Config memory"
                          }
                        },
                        "id": 20924,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "collector_balance",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 21264,
                        "src": "12640:34:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                          "typeString": "struct Types.MutableUint memory"
                        }
                      },
                      "id": 20925,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "post",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 25203,
                      "src": "12640:39:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 20926,
                            "name": "_transfer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20882,
                            "src": "12682:9:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                              "typeString": "struct TransferStructs.Transfer memory"
                            }
                          },
                          "id": 20927,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "config",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 21283,
                          "src": "12682:16:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Config_$21275_memory",
                            "typeString": "struct TransferStructs.Config memory"
                          }
                        },
                        "id": 20928,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "collector_balance",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 21264,
                        "src": "12682:34:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                          "typeString": "struct Types.MutableUint memory"
                        }
                      },
                      "id": 20929,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "pre",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 25201,
                      "src": "12682:38:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "12640:80:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 20931,
                  "nodeType": "ExpressionStatement",
                  "src": "12640:80:70"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 20945,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 20932,
                          "name": "_transfer",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 20882,
                          "src": "12726:9:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                            "typeString": "struct TransferStructs.Transfer memory"
                          }
                        },
                        "id": 20935,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "recipient",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 21279,
                        "src": "12726:19:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_User_$21257_memory",
                          "typeString": "struct TransferStructs.User memory"
                        }
                      },
                      "id": 20936,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "balance",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 21254,
                      "src": "12726:27:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                        "typeString": "struct Types.MutableUint memory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 20941,
                              "name": "_transfer",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 20882,
                              "src": "12788:9:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                                "typeString": "struct TransferStructs.Transfer memory"
                              }
                            },
                            "id": 20942,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "received_amount",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 21285,
                            "src": "12788:25:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                              "typeString": "struct Types.MutableUint memory"
                            }
                          },
                          "id": 20943,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "post",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 25203,
                          "src": "12788:30:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 20937,
                              "name": "_transfer",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 20882,
                              "src": "12756:9:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                                "typeString": "struct TransferStructs.Transfer memory"
                              }
                            },
                            "id": 20938,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "recipient",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 21279,
                            "src": "12756:19:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_User_$21257_memory",
                              "typeString": "struct TransferStructs.User memory"
                            }
                          },
                          "id": 20939,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "balance",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 21254,
                          "src": "12756:27:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                            "typeString": "struct Types.MutableUint memory"
                          }
                        },
                        "id": 20940,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "add",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 25452,
                        "src": "12756:31:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_struct$_MutableUint_$25204_memory_ptr_$_t_uint256_$returns$_t_struct$_MutableUint_$25204_memory_ptr_$bound_to$_t_struct$_MutableUint_$25204_memory_ptr_$",
                          "typeString": "function (struct Types.MutableUint memory,uint256) pure returns (struct Types.MutableUint memory)"
                        }
                      },
                      "id": 20944,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "12756:63:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_MutableUint_$25204_memory_ptr",
                        "typeString": "struct Types.MutableUint memory"
                      }
                    },
                    "src": "12726:93:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                      "typeString": "struct Types.MutableUint memory"
                    }
                  },
                  "id": 20946,
                  "nodeType": "ExpressionStatement",
                  "src": "12726:93:70"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 20949,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 20947,
                      "name": "_built",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20885,
                      "src": "12825:6:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                        "typeString": "struct TransferStructs.Transfer memory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 20948,
                      "name": "_transfer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20882,
                      "src": "12834:9:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                        "typeString": "struct TransferStructs.Transfer memory"
                      }
                    },
                    "src": "12825:18:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                      "typeString": "struct TransferStructs.Transfer memory"
                    }
                  },
                  "id": 20950,
                  "nodeType": "ExpressionStatement",
                  "src": "12825:18:70"
                }
              ]
            },
            "documentation": null,
            "id": 20952,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "build_transfer_with_no_transfer_fee",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 20883,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20882,
                  "name": "_transfer",
                  "nodeType": "VariableDeclaration",
                  "scope": 20952,
                  "src": "12308:41:70",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                    "typeString": "struct TransferStructs.Transfer"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 20881,
                    "name": "TransferStructs.Transfer",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21292,
                    "src": "12308:24:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Transfer_$21292_storage_ptr",
                      "typeString": "struct TransferStructs.Transfer"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12307:43:70"
            },
            "payable": false,
            "returnParameters": {
              "id": 20886,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20885,
                  "name": "_built",
                  "nodeType": "VariableDeclaration",
                  "scope": 20952,
                  "src": "12385:38:70",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                    "typeString": "struct TransferStructs.Transfer"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 20884,
                    "name": "TransferStructs.Transfer",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21292,
                    "src": "12385:24:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Transfer_$21292_storage_ptr",
                      "typeString": "struct TransferStructs.Transfer"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12384:40:70"
            },
            "scope": 21192,
            "src": "12263:585:70",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "private"
          },
          {
            "body": {
              "id": 21042,
              "nodeType": "Block",
              "src": "13013:548:70",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 20973,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 20959,
                        "name": "_transfer",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20954,
                        "src": "13019:9:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                          "typeString": "struct TransferStructs.Transfer memory"
                        }
                      },
                      "id": 20961,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "fee",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 21289,
                      "src": "13019:13:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 20972,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "components": [
                          {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 20967,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 20962,
                                "name": "_transfer",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 20954,
                                "src": "13036:9:70",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                                  "typeString": "struct TransferStructs.Transfer memory"
                                }
                              },
                              "id": 20963,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sent_amount",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 21287,
                              "src": "13036:21:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "*",
                            "rightExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 20964,
                                  "name": "_transfer",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 20954,
                                  "src": "13060:9:70",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                                    "typeString": "struct TransferStructs.Transfer memory"
                                  }
                                },
                                "id": 20965,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "config",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 21283,
                                "src": "13060:16:70",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Config_$21275_memory",
                                  "typeString": "struct TransferStructs.Config memory"
                                }
                              },
                              "id": 20966,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "rate",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 21270,
                              "src": "13060:21:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "13036:45:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "id": 20968,
                        "isConstant": false,
                        "isInlineArray": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "TupleExpression",
                        "src": "13035:47:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "/",
                      "rightExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 20969,
                            "name": "_transfer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20954,
                            "src": "13085:9:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                              "typeString": "struct TransferStructs.Transfer memory"
                            }
                          },
                          "id": 20970,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "config",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 21283,
                          "src": "13085:16:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Config_$21275_memory",
                            "typeString": "struct TransferStructs.Config memory"
                          }
                        },
                        "id": 20971,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "base",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 21268,
                        "src": "13085:21:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "13035:71:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "13019:87:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 20974,
                  "nodeType": "ExpressionStatement",
                  "src": "13019:87:70"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 20982,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 20975,
                          "name": "_transfer",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 20954,
                          "src": "13112:9:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                            "typeString": "struct TransferStructs.Transfer memory"
                          }
                        },
                        "id": 20978,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "received_amount",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 21285,
                        "src": "13112:25:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                          "typeString": "struct Types.MutableUint memory"
                        }
                      },
                      "id": 20979,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "pre",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 25201,
                      "src": "13112:29:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 20980,
                        "name": "_transfer",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20954,
                        "src": "13144:9:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                          "typeString": "struct TransferStructs.Transfer memory"
                        }
                      },
                      "id": 20981,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sent_amount",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 21287,
                      "src": "13144:21:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "13112:53:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 20983,
                  "nodeType": "ExpressionStatement",
                  "src": "13112:53:70"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 20993,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 20984,
                        "name": "_transfer",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20954,
                        "src": "13171:9:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                          "typeString": "struct TransferStructs.Transfer memory"
                        }
                      },
                      "id": 20986,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "received_amount",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 21285,
                      "src": "13171:25:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                        "typeString": "struct Types.MutableUint memory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 20990,
                            "name": "_transfer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20954,
                            "src": "13234:9:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                              "typeString": "struct TransferStructs.Transfer memory"
                            }
                          },
                          "id": 20991,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "fee",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 21289,
                          "src": "13234:13:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 20987,
                            "name": "_transfer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20954,
                            "src": "13199:9:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                              "typeString": "struct TransferStructs.Transfer memory"
                            }
                          },
                          "id": 20988,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "received_amount",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 21285,
                          "src": "13199:25:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                            "typeString": "struct Types.MutableUint memory"
                          }
                        },
                        "id": 20989,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "subtract",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 25482,
                        "src": "13199:34:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_struct$_MutableUint_$25204_memory_ptr_$_t_uint256_$returns$_t_struct$_MutableUint_$25204_memory_ptr_$bound_to$_t_struct$_MutableUint_$25204_memory_ptr_$",
                          "typeString": "function (struct Types.MutableUint memory,uint256) pure returns (struct Types.MutableUint memory)"
                        }
                      },
                      "id": 20992,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "13199:49:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_MutableUint_$25204_memory_ptr",
                        "typeString": "struct Types.MutableUint memory"
                      }
                    },
                    "src": "13171:77:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                      "typeString": "struct Types.MutableUint memory"
                    }
                  },
                  "id": 20994,
                  "nodeType": "ExpressionStatement",
                  "src": "13171:77:70"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 21007,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 20995,
                          "name": "_transfer",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 20954,
                          "src": "13254:9:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                            "typeString": "struct TransferStructs.Transfer memory"
                          }
                        },
                        "id": 20998,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "config",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 21283,
                        "src": "13254:16:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Config_$21275_memory",
                          "typeString": "struct TransferStructs.Config memory"
                        }
                      },
                      "id": 20999,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "collector_balance",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 21264,
                      "src": "13254:34:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                        "typeString": "struct Types.MutableUint memory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 21004,
                            "name": "_transfer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20954,
                            "src": "13330:9:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                              "typeString": "struct TransferStructs.Transfer memory"
                            }
                          },
                          "id": 21005,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "fee",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 21289,
                          "src": "13330:13:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 21000,
                              "name": "_transfer",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 20954,
                              "src": "13291:9:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                                "typeString": "struct TransferStructs.Transfer memory"
                              }
                            },
                            "id": 21001,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "config",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 21283,
                            "src": "13291:16:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Config_$21275_memory",
                              "typeString": "struct TransferStructs.Config memory"
                            }
                          },
                          "id": 21002,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "collector_balance",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 21264,
                          "src": "13291:34:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                            "typeString": "struct Types.MutableUint memory"
                          }
                        },
                        "id": 21003,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "add",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 25452,
                        "src": "13291:38:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_struct$_MutableUint_$25204_memory_ptr_$_t_uint256_$returns$_t_struct$_MutableUint_$25204_memory_ptr_$bound_to$_t_struct$_MutableUint_$25204_memory_ptr_$",
                          "typeString": "function (struct Types.MutableUint memory,uint256) pure returns (struct Types.MutableUint memory)"
                        }
                      },
                      "id": 21006,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "13291:53:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_MutableUint_$25204_memory_ptr",
                        "typeString": "struct Types.MutableUint memory"
                      }
                    },
                    "src": "13254:90:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                      "typeString": "struct Types.MutableUint memory"
                    }
                  },
                  "id": 21008,
                  "nodeType": "ExpressionStatement",
                  "src": "13254:90:70"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 21021,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 21009,
                          "name": "_transfer",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 20954,
                          "src": "13350:9:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                            "typeString": "struct TransferStructs.Transfer memory"
                          }
                        },
                        "id": 21012,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 21277,
                        "src": "13350:16:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_User_$21257_memory",
                          "typeString": "struct TransferStructs.User memory"
                        }
                      },
                      "id": 21013,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "balance",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 21254,
                      "src": "13350:24:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                        "typeString": "struct Types.MutableUint memory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 21018,
                            "name": "_transfer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20954,
                            "src": "13411:9:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                              "typeString": "struct TransferStructs.Transfer memory"
                            }
                          },
                          "id": 21019,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sent_amount",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 21287,
                          "src": "13411:21:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 21014,
                              "name": "_transfer",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 20954,
                              "src": "13377:9:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                                "typeString": "struct TransferStructs.Transfer memory"
                              }
                            },
                            "id": 21015,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 21277,
                            "src": "13377:16:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_User_$21257_memory",
                              "typeString": "struct TransferStructs.User memory"
                            }
                          },
                          "id": 21016,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "balance",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 21254,
                          "src": "13377:24:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                            "typeString": "struct Types.MutableUint memory"
                          }
                        },
                        "id": 21017,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "subtract",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 25482,
                        "src": "13377:33:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_struct$_MutableUint_$25204_memory_ptr_$_t_uint256_$returns$_t_struct$_MutableUint_$25204_memory_ptr_$bound_to$_t_struct$_MutableUint_$25204_memory_ptr_$",
                          "typeString": "function (struct Types.MutableUint memory,uint256) pure returns (struct Types.MutableUint memory)"
                        }
                      },
                      "id": 21020,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "13377:56:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_MutableUint_$25204_memory_ptr",
                        "typeString": "struct Types.MutableUint memory"
                      }
                    },
                    "src": "13350:83:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                      "typeString": "struct Types.MutableUint memory"
                    }
                  },
                  "id": 21022,
                  "nodeType": "ExpressionStatement",
                  "src": "13350:83:70"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 21036,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 21023,
                          "name": "_transfer",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 20954,
                          "src": "13439:9:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                            "typeString": "struct TransferStructs.Transfer memory"
                          }
                        },
                        "id": 21026,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "recipient",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 21279,
                        "src": "13439:19:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_User_$21257_memory",
                          "typeString": "struct TransferStructs.User memory"
                        }
                      },
                      "id": 21027,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "balance",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 21254,
                      "src": "13439:27:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                        "typeString": "struct Types.MutableUint memory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 21032,
                              "name": "_transfer",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 20954,
                              "src": "13501:9:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                                "typeString": "struct TransferStructs.Transfer memory"
                              }
                            },
                            "id": 21033,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "received_amount",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 21285,
                            "src": "13501:25:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                              "typeString": "struct Types.MutableUint memory"
                            }
                          },
                          "id": 21034,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "post",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 25203,
                          "src": "13501:30:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 21028,
                              "name": "_transfer",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 20954,
                              "src": "13469:9:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                                "typeString": "struct TransferStructs.Transfer memory"
                              }
                            },
                            "id": 21029,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "recipient",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 21279,
                            "src": "13469:19:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_User_$21257_memory",
                              "typeString": "struct TransferStructs.User memory"
                            }
                          },
                          "id": 21030,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "balance",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 21254,
                          "src": "13469:27:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                            "typeString": "struct Types.MutableUint memory"
                          }
                        },
                        "id": 21031,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "add",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 25452,
                        "src": "13469:31:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_struct$_MutableUint_$25204_memory_ptr_$_t_uint256_$returns$_t_struct$_MutableUint_$25204_memory_ptr_$bound_to$_t_struct$_MutableUint_$25204_memory_ptr_$",
                          "typeString": "function (struct Types.MutableUint memory,uint256) pure returns (struct Types.MutableUint memory)"
                        }
                      },
                      "id": 21035,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "13469:63:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_MutableUint_$25204_memory_ptr",
                        "typeString": "struct Types.MutableUint memory"
                      }
                    },
                    "src": "13439:93:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                      "typeString": "struct Types.MutableUint memory"
                    }
                  },
                  "id": 21037,
                  "nodeType": "ExpressionStatement",
                  "src": "13439:93:70"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 21040,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 21038,
                      "name": "_built",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20957,
                      "src": "13538:6:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                        "typeString": "struct TransferStructs.Transfer memory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 21039,
                      "name": "_transfer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20954,
                      "src": "13547:9:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                        "typeString": "struct TransferStructs.Transfer memory"
                      }
                    },
                    "src": "13538:18:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                      "typeString": "struct TransferStructs.Transfer memory"
                    }
                  },
                  "id": 21041,
                  "nodeType": "ExpressionStatement",
                  "src": "13538:18:70"
                }
              ]
            },
            "documentation": null,
            "id": 21043,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "build_transfer_with_transfer_fee",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 20955,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20954,
                  "name": "_transfer",
                  "nodeType": "VariableDeclaration",
                  "scope": 21043,
                  "src": "12894:41:70",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                    "typeString": "struct TransferStructs.Transfer"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 20953,
                    "name": "TransferStructs.Transfer",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21292,
                    "src": "12894:24:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Transfer_$21292_storage_ptr",
                      "typeString": "struct TransferStructs.Transfer"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12893:43:70"
            },
            "payable": false,
            "returnParameters": {
              "id": 20958,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20957,
                  "name": "_built",
                  "nodeType": "VariableDeclaration",
                  "scope": 21043,
                  "src": "12971:38:70",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                    "typeString": "struct TransferStructs.Transfer"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 20956,
                    "name": "TransferStructs.Transfer",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21292,
                    "src": "12971:24:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Transfer_$21292_storage_ptr",
                      "typeString": "struct TransferStructs.Transfer"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12970:40:70"
            },
            "scope": 21192,
            "src": "12852:709:70",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "private"
          },
          {
            "body": {
              "id": 21070,
              "nodeType": "Block",
              "src": "13725:105:70",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 21064,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 21054,
                                "name": "system",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 19681,
                                "src": "13731:6:70",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_System_$19679_storage",
                                  "typeString": "struct DummyDGXStorage.System storage ref"
                                }
                              },
                              "id": 21057,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "users",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 19678,
                              "src": "13731:12:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_User_$19668_storage_$",
                                "typeString": "mapping(address => struct DummyDGXStorage.User storage ref)"
                              }
                            },
                            "id": 21058,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 21056,
                              "name": "_account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 21045,
                              "src": "13744:8:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "13731:22:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_User_$19668_storage",
                              "typeString": "struct DummyDGXStorage.User storage ref"
                            }
                          },
                          "id": 21059,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "data",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 19667,
                          "src": "13731:27:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_UserData_$19663_storage",
                            "typeString": "struct DummyDGXStorage.UserData storage ref"
                          }
                        },
                        "id": 21060,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "spender_allowances",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 19662,
                        "src": "13731:46:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 21062,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 21061,
                        "name": "_spender",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21047,
                        "src": "13778:8:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "13731:56:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 21063,
                      "name": "_new_allowance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21049,
                      "src": "13790:14:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "13731:73:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 21065,
                  "nodeType": "ExpressionStatement",
                  "src": "13731:73:70"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 21068,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 21066,
                      "name": "_success",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21052,
                      "src": "13810:8:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "74727565",
                      "id": 21067,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "13821:4:70",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "true"
                    },
                    "src": "13810:15:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 21069,
                  "nodeType": "ExpressionStatement",
                  "src": "13810:15:70"
                }
              ]
            },
            "documentation": null,
            "id": 21071,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "update_account_spender_allowance",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 21050,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 21045,
                  "name": "_account",
                  "nodeType": "VariableDeclaration",
                  "scope": 21071,
                  "src": "13612:16:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 21044,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "13612:7:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 21047,
                  "name": "_spender",
                  "nodeType": "VariableDeclaration",
                  "scope": 21071,
                  "src": "13634:16:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 21046,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "13634:7:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 21049,
                  "name": "_new_allowance",
                  "nodeType": "VariableDeclaration",
                  "scope": 21071,
                  "src": "13656:22:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 21048,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "13656:7:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "13606:76:70"
            },
            "payable": false,
            "returnParameters": {
              "id": 21053,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 21052,
                  "name": "_success",
                  "nodeType": "VariableDeclaration",
                  "scope": 21071,
                  "src": "13708:13:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 21051,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "13708:4:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "13707:15:70"
            },
            "scope": 21192,
            "src": "13565:265:70",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "private"
          },
          {
            "body": {
              "id": 21122,
              "nodeType": "Block",
              "src": "14076:265:70",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 21094,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 21086,
                              "name": "system",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 19681,
                              "src": "14082:6:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_System_$19679_storage",
                                "typeString": "struct DummyDGXStorage.System storage ref"
                              }
                            },
                            "id": 21089,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "users",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 19678,
                            "src": "14082:12:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_struct$_User_$19668_storage_$",
                              "typeString": "mapping(address => struct DummyDGXStorage.User storage ref)"
                            }
                          },
                          "id": 21090,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 21088,
                            "name": "_sender",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 21073,
                            "src": "14095:7:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "14082:21:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_User_$19668_storage",
                            "typeString": "struct DummyDGXStorage.User storage ref"
                          }
                        },
                        "id": 21091,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "data",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 19667,
                        "src": "14082:26:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_UserData_$19663_storage",
                          "typeString": "struct DummyDGXStorage.UserData storage ref"
                        }
                      },
                      "id": 21092,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "raw_balance",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 19658,
                      "src": "14082:38:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 21093,
                      "name": "_sender_new_balance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21075,
                      "src": "14123:19:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "14082:60:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 21095,
                  "nodeType": "ExpressionStatement",
                  "src": "14082:60:70"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 21104,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 21096,
                              "name": "system",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 19681,
                              "src": "14148:6:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_System_$19679_storage",
                                "typeString": "struct DummyDGXStorage.System storage ref"
                              }
                            },
                            "id": 21099,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "users",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 19678,
                            "src": "14148:12:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_struct$_User_$19668_storage_$",
                              "typeString": "mapping(address => struct DummyDGXStorage.User storage ref)"
                            }
                          },
                          "id": 21100,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 21098,
                            "name": "_recipient",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 21077,
                            "src": "14161:10:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "14148:24:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_User_$19668_storage",
                            "typeString": "struct DummyDGXStorage.User storage ref"
                          }
                        },
                        "id": 21101,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "data",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 19667,
                        "src": "14148:29:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_UserData_$19663_storage",
                          "typeString": "struct DummyDGXStorage.UserData storage ref"
                        }
                      },
                      "id": 21102,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "raw_balance",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 19658,
                      "src": "14148:41:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 21103,
                      "name": "_recipient_new_balance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21079,
                      "src": "14192:22:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "14148:66:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 21105,
                  "nodeType": "ExpressionStatement",
                  "src": "14148:66:70"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 21116,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 21106,
                              "name": "system",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 19681,
                              "src": "14220:6:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_System_$19679_storage",
                                "typeString": "struct DummyDGXStorage.System storage ref"
                              }
                            },
                            "id": 21111,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "users",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 19678,
                            "src": "14220:12:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_struct$_User_$19668_storage_$",
                              "typeString": "mapping(address => struct DummyDGXStorage.User storage ref)"
                            }
                          },
                          "id": 21112,
                          "indexExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 21108,
                                "name": "system",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 19681,
                                "src": "14233:6:70",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_System_$19679_storage",
                                  "typeString": "struct DummyDGXStorage.System storage ref"
                                }
                              },
                              "id": 21109,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "collectors",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 19670,
                              "src": "14233:17:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Collectors_$19649_storage",
                                "typeString": "struct DummyDGXStorage.Collectors storage ref"
                              }
                            },
                            "id": 21110,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "transfer",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 19648,
                            "src": "14233:26:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "14220:40:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_User_$19668_storage",
                            "typeString": "struct DummyDGXStorage.User storage ref"
                          }
                        },
                        "id": 21113,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "data",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 19667,
                        "src": "14220:45:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_UserData_$19663_storage",
                          "typeString": "struct DummyDGXStorage.UserData storage ref"
                        }
                      },
                      "id": 21114,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "raw_balance",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 19658,
                      "src": "14220:57:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 21115,
                      "name": "_transfer_fee_collector_new_balance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21081,
                      "src": "14280:35:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "14220:95:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 21117,
                  "nodeType": "ExpressionStatement",
                  "src": "14220:95:70"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 21120,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 21118,
                      "name": "_success",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21084,
                      "src": "14321:8:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "74727565",
                      "id": 21119,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "14332:4:70",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "true"
                    },
                    "src": "14321:15:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 21121,
                  "nodeType": "ExpressionStatement",
                  "src": "14321:15:70"
                }
              ]
            },
            "documentation": null,
            "id": 21123,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "update_transfer_balance",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 21082,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 21073,
                  "name": "_sender",
                  "nodeType": "VariableDeclaration",
                  "scope": 21123,
                  "src": "13872:15:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 21072,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "13872:7:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 21075,
                  "name": "_sender_new_balance",
                  "nodeType": "VariableDeclaration",
                  "scope": 21123,
                  "src": "13893:27:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 21074,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "13893:7:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 21077,
                  "name": "_recipient",
                  "nodeType": "VariableDeclaration",
                  "scope": 21123,
                  "src": "13926:18:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 21076,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "13926:7:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 21079,
                  "name": "_recipient_new_balance",
                  "nodeType": "VariableDeclaration",
                  "scope": 21123,
                  "src": "13950:30:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 21078,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "13950:7:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 21081,
                  "name": "_transfer_fee_collector_new_balance",
                  "nodeType": "VariableDeclaration",
                  "scope": 21123,
                  "src": "13986:43:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 21080,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "13986:7:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "13866:167:70"
            },
            "payable": false,
            "returnParameters": {
              "id": 21085,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 21084,
                  "name": "_success",
                  "nodeType": "VariableDeclaration",
                  "scope": 21123,
                  "src": "14059:13:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 21083,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "14059:4:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "14058:15:70"
            },
            "scope": 21192,
            "src": "13834:507:70",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "private"
          },
          {
            "body": {
              "id": 21190,
              "nodeType": "Block",
              "src": "14650:351:70",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 21150,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 21142,
                              "name": "system",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 19681,
                              "src": "14656:6:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_System_$19679_storage",
                                "typeString": "struct DummyDGXStorage.System storage ref"
                              }
                            },
                            "id": 21145,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "users",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 19678,
                            "src": "14656:12:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_struct$_User_$19668_storage_$",
                              "typeString": "mapping(address => struct DummyDGXStorage.User storage ref)"
                            }
                          },
                          "id": 21146,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 21144,
                            "name": "_sender",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 21125,
                            "src": "14669:7:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "14656:21:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_User_$19668_storage",
                            "typeString": "struct DummyDGXStorage.User storage ref"
                          }
                        },
                        "id": 21147,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "data",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 19667,
                        "src": "14656:26:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_UserData_$19663_storage",
                          "typeString": "struct DummyDGXStorage.UserData storage ref"
                        }
                      },
                      "id": 21148,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "raw_balance",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 19658,
                      "src": "14656:38:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 21149,
                      "name": "_sender_new_balance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21127,
                      "src": "14697:19:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "14656:60:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 21151,
                  "nodeType": "ExpressionStatement",
                  "src": "14656:60:70"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 21160,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 21152,
                              "name": "system",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 19681,
                              "src": "14722:6:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_System_$19679_storage",
                                "typeString": "struct DummyDGXStorage.System storage ref"
                              }
                            },
                            "id": 21155,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "users",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 19678,
                            "src": "14722:12:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_struct$_User_$19668_storage_$",
                              "typeString": "mapping(address => struct DummyDGXStorage.User storage ref)"
                            }
                          },
                          "id": 21156,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 21154,
                            "name": "_recipient",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 21129,
                            "src": "14735:10:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "14722:24:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_User_$19668_storage",
                            "typeString": "struct DummyDGXStorage.User storage ref"
                          }
                        },
                        "id": 21157,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "data",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 19667,
                        "src": "14722:29:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_UserData_$19663_storage",
                          "typeString": "struct DummyDGXStorage.UserData storage ref"
                        }
                      },
                      "id": 21158,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "raw_balance",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 19658,
                      "src": "14722:41:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 21159,
                      "name": "_recipient_new_balance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21131,
                      "src": "14766:22:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "14722:66:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 21161,
                  "nodeType": "ExpressionStatement",
                  "src": "14722:66:70"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 21172,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 21162,
                              "name": "system",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 19681,
                              "src": "14794:6:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_System_$19679_storage",
                                "typeString": "struct DummyDGXStorage.System storage ref"
                              }
                            },
                            "id": 21167,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "users",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 19678,
                            "src": "14794:12:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_struct$_User_$19668_storage_$",
                              "typeString": "mapping(address => struct DummyDGXStorage.User storage ref)"
                            }
                          },
                          "id": 21168,
                          "indexExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 21164,
                                "name": "system",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 19681,
                                "src": "14807:6:70",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_System_$19679_storage",
                                  "typeString": "struct DummyDGXStorage.System storage ref"
                                }
                              },
                              "id": 21165,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "collectors",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 19670,
                              "src": "14807:17:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Collectors_$19649_storage",
                                "typeString": "struct DummyDGXStorage.Collectors storage ref"
                              }
                            },
                            "id": 21166,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "transfer",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 19648,
                            "src": "14807:26:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "14794:40:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_User_$19668_storage",
                            "typeString": "struct DummyDGXStorage.User storage ref"
                          }
                        },
                        "id": 21169,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "data",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 19667,
                        "src": "14794:45:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_UserData_$19663_storage",
                          "typeString": "struct DummyDGXStorage.UserData storage ref"
                        }
                      },
                      "id": 21170,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "raw_balance",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 19658,
                      "src": "14794:57:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 21171,
                      "name": "_transfer_fee_collector_new_balance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21133,
                      "src": "14854:35:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "14794:95:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 21173,
                  "nodeType": "ExpressionStatement",
                  "src": "14794:95:70"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 21184,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 21174,
                                "name": "system",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 19681,
                                "src": "14895:6:70",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_System_$19679_storage",
                                  "typeString": "struct DummyDGXStorage.System storage ref"
                                }
                              },
                              "id": 21177,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "users",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 19678,
                              "src": "14895:12:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_User_$19668_storage_$",
                                "typeString": "mapping(address => struct DummyDGXStorage.User storage ref)"
                              }
                            },
                            "id": 21178,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 21176,
                              "name": "_sender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 21125,
                              "src": "14908:7:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "14895:21:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_User_$19668_storage",
                              "typeString": "struct DummyDGXStorage.User storage ref"
                            }
                          },
                          "id": 21179,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "data",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 19667,
                          "src": "14895:26:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_UserData_$19663_storage",
                            "typeString": "struct DummyDGXStorage.UserData storage ref"
                          }
                        },
                        "id": 21180,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "spender_allowances",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 19662,
                        "src": "14895:45:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 21182,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 21181,
                        "name": "_spender",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21135,
                        "src": "14941:8:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "14895:55:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 21183,
                      "name": "_spender_new_allowance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21137,
                      "src": "14953:22:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "14895:80:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 21185,
                  "nodeType": "ExpressionStatement",
                  "src": "14895:80:70"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 21188,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 21186,
                      "name": "_success",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21140,
                      "src": "14981:8:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "74727565",
                      "id": 21187,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "14992:4:70",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "true"
                    },
                    "src": "14981:15:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 21189,
                  "nodeType": "ExpressionStatement",
                  "src": "14981:15:70"
                }
              ]
            },
            "documentation": null,
            "id": 21191,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "update_transfer_from_balance",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 21138,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 21125,
                  "name": "_sender",
                  "nodeType": "VariableDeclaration",
                  "scope": 21191,
                  "src": "14388:15:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 21124,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "14388:7:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 21127,
                  "name": "_sender_new_balance",
                  "nodeType": "VariableDeclaration",
                  "scope": 21191,
                  "src": "14409:27:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 21126,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "14409:7:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 21129,
                  "name": "_recipient",
                  "nodeType": "VariableDeclaration",
                  "scope": 21191,
                  "src": "14442:18:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 21128,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "14442:7:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 21131,
                  "name": "_recipient_new_balance",
                  "nodeType": "VariableDeclaration",
                  "scope": 21191,
                  "src": "14466:30:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 21130,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "14466:7:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 21133,
                  "name": "_transfer_fee_collector_new_balance",
                  "nodeType": "VariableDeclaration",
                  "scope": 21191,
                  "src": "14502:43:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 21132,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "14502:7:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 21135,
                  "name": "_spender",
                  "nodeType": "VariableDeclaration",
                  "scope": 21191,
                  "src": "14551:16:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 21134,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "14551:7:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 21137,
                  "name": "_spender_new_allowance",
                  "nodeType": "VariableDeclaration",
                  "scope": 21191,
                  "src": "14573:30:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 21136,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "14573:7:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "14382:225:70"
            },
            "payable": false,
            "returnParameters": {
              "id": 21141,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 21140,
                  "name": "_success",
                  "nodeType": "VariableDeclaration",
                  "scope": 21191,
                  "src": "14633:13:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 21139,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "14633:4:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "14632:15:70"
            },
            "scope": 21192,
            "src": "14345:656:70",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "private"
          }
        ],
        "scope": 21193,
        "src": "258:14745:70"
      }
    ],
    "src": "0:15004:70"
  },
  "legacyAST": {
    "absolutePath": "@digix/lite-dgx-contract/contracts/DummyDGXStorage.sol",
    "exportedSymbols": {
      "DummyDGXStorage": [
        21192
      ]
    },
    "id": 21193,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 19612,
        "literals": [
          "solidity",
          "^",
          "0.4",
          ".23"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:24:70"
      },
      {
        "absolutePath": "@digix/solidity-core-libraries/contracts/MathUtils.sol",
        "file": "@digix/solidity-core-libraries/contracts/MathUtils.sol",
        "id": 19613,
        "nodeType": "ImportDirective",
        "scope": 21193,
        "sourceUnit": 25198,
        "src": "26:64:70",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@digix/solidity-core-libraries/contracts/Types.sol",
        "file": "@digix/solidity-core-libraries/contracts/Types.sol",
        "id": 19614,
        "nodeType": "ImportDirective",
        "scope": 21193,
        "sourceUnit": 25518,
        "src": "91:60:70",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@digix/lite-dgx-contract/contracts/TokenReceiver.sol",
        "file": "./TokenReceiver.sol",
        "id": 19615,
        "nodeType": "ImportDirective",
        "scope": 21193,
        "sourceUnit": 21207,
        "src": "152:29:70",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@digix/lite-dgx-contract/contracts/libs/DemurrageStructs.sol",
        "file": "./libs/DemurrageStructs.sol",
        "id": 19616,
        "nodeType": "ImportDirective",
        "scope": 21193,
        "sourceUnit": 21242,
        "src": "182:37:70",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@digix/lite-dgx-contract/contracts/libs/TransferStructs.sol",
        "file": "./libs/TransferStructs.sol",
        "id": 19617,
        "nodeType": "ImportDirective",
        "scope": 21193,
        "sourceUnit": 21294,
        "src": "220:36:70",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 21192,
        "linearizedBaseContracts": [
          21192
        ],
        "name": "DummyDGXStorage",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "id": 19620,
            "libraryName": {
              "contractScope": null,
              "id": 19618,
              "name": "Types",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 25517,
              "src": "293:5:70",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Types_$25517",
                "typeString": "library Types"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "287:34:70",
            "typeName": {
              "contractScope": null,
              "id": 19619,
              "name": "Types.MutableUint",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 25204,
              "src": "303:17:70",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_MutableUint_$25204_storage_ptr",
                "typeString": "struct Types.MutableUint"
              }
            }
          },
          {
            "id": 19623,
            "libraryName": {
              "contractScope": null,
              "id": 19621,
              "name": "Types",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 25517,
              "src": "330:5:70",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Types_$25517",
                "typeString": "library Types"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "324:39:70",
            "typeName": {
              "contractScope": null,
              "id": 19622,
              "name": "Types.MutableTimestamp",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 25209,
              "src": "340:22:70",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_MutableTimestamp_$25209_storage_ptr",
                "typeString": "struct Types.MutableTimestamp"
              }
            }
          },
          {
            "canonicalName": "DummyDGXStorage.FeeConfiguration",
            "id": 19628,
            "members": [
              {
                "constant": false,
                "id": 19625,
                "name": "base",
                "nodeType": "VariableDeclaration",
                "scope": 19628,
                "src": "397:12:70",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 19624,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "397:7:70",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 19627,
                "name": "rate",
                "nodeType": "VariableDeclaration",
                "scope": 19628,
                "src": "415:12:70",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 19626,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "415:7:70",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "FeeConfiguration",
            "nodeType": "StructDefinition",
            "scope": 21192,
            "src": "367:65:70",
            "visibility": "public"
          },
          {
            "canonicalName": "DummyDGXStorage.GlobalConfig",
            "id": 19639,
            "members": [
              {
                "constant": false,
                "id": 19630,
                "name": "current_version",
                "nodeType": "VariableDeclaration",
                "scope": 19639,
                "src": "462:23:70",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                },
                "typeName": {
                  "id": 19629,
                  "name": "bytes32",
                  "nodeType": "ElementaryTypeName",
                  "src": "462:7:70",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 19632,
                "name": "no_demurrage_fee",
                "nodeType": "VariableDeclaration",
                "scope": 19639,
                "src": "491:21:70",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bool",
                  "typeString": "bool"
                },
                "typeName": {
                  "id": 19631,
                  "name": "bool",
                  "nodeType": "ElementaryTypeName",
                  "src": "491:4:70",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 19634,
                "name": "no_transfer_fee",
                "nodeType": "VariableDeclaration",
                "scope": 19639,
                "src": "518:20:70",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bool",
                  "typeString": "bool"
                },
                "typeName": {
                  "id": 19633,
                  "name": "bool",
                  "nodeType": "ElementaryTypeName",
                  "src": "518:4:70",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 19636,
                "name": "minimum_transfer_amount",
                "nodeType": "VariableDeclaration",
                "scope": 19639,
                "src": "544:31:70",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 19635,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "544:7:70",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 19638,
                "name": "fees",
                "nodeType": "VariableDeclaration",
                "scope": 19639,
                "src": "581:9:70",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_Fees_$19644_storage_ptr",
                  "typeString": "struct DummyDGXStorage.Fees"
                },
                "typeName": {
                  "contractScope": null,
                  "id": 19637,
                  "name": "Fees",
                  "nodeType": "UserDefinedTypeName",
                  "referencedDeclaration": 19644,
                  "src": "581:4:70",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Fees_$19644_storage_ptr",
                    "typeString": "struct DummyDGXStorage.Fees"
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "GlobalConfig",
            "nodeType": "StructDefinition",
            "scope": 21192,
            "src": "436:159:70",
            "visibility": "public"
          },
          {
            "canonicalName": "DummyDGXStorage.Fees",
            "id": 19644,
            "members": [
              {
                "constant": false,
                "id": 19641,
                "name": "demurrage",
                "nodeType": "VariableDeclaration",
                "scope": 19644,
                "src": "617:26:70",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_FeeConfiguration_$19628_storage_ptr",
                  "typeString": "struct DummyDGXStorage.FeeConfiguration"
                },
                "typeName": {
                  "contractScope": null,
                  "id": 19640,
                  "name": "FeeConfiguration",
                  "nodeType": "UserDefinedTypeName",
                  "referencedDeclaration": 19628,
                  "src": "617:16:70",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_FeeConfiguration_$19628_storage_ptr",
                    "typeString": "struct DummyDGXStorage.FeeConfiguration"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 19643,
                "name": "transfer",
                "nodeType": "VariableDeclaration",
                "scope": 19644,
                "src": "649:25:70",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_FeeConfiguration_$19628_storage_ptr",
                  "typeString": "struct DummyDGXStorage.FeeConfiguration"
                },
                "typeName": {
                  "contractScope": null,
                  "id": 19642,
                  "name": "FeeConfiguration",
                  "nodeType": "UserDefinedTypeName",
                  "referencedDeclaration": 19628,
                  "src": "649:16:70",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_FeeConfiguration_$19628_storage_ptr",
                    "typeString": "struct DummyDGXStorage.FeeConfiguration"
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "Fees",
            "nodeType": "StructDefinition",
            "scope": 21192,
            "src": "599:80:70",
            "visibility": "public"
          },
          {
            "canonicalName": "DummyDGXStorage.Collectors",
            "id": 19649,
            "members": [
              {
                "constant": false,
                "id": 19646,
                "name": "demurrage",
                "nodeType": "VariableDeclaration",
                "scope": 19649,
                "src": "707:17:70",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                },
                "typeName": {
                  "id": 19645,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "707:7:70",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 19648,
                "name": "transfer",
                "nodeType": "VariableDeclaration",
                "scope": 19649,
                "src": "730:16:70",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                },
                "typeName": {
                  "id": 19647,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "730:7:70",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "Collectors",
            "nodeType": "StructDefinition",
            "scope": 21192,
            "src": "683:68:70",
            "visibility": "public"
          },
          {
            "canonicalName": "DummyDGXStorage.UserConfig",
            "id": 19654,
            "members": [
              {
                "constant": false,
                "id": 19651,
                "name": "no_demurrage_fee",
                "nodeType": "VariableDeclaration",
                "scope": 19654,
                "src": "779:21:70",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bool",
                  "typeString": "bool"
                },
                "typeName": {
                  "id": 19650,
                  "name": "bool",
                  "nodeType": "ElementaryTypeName",
                  "src": "779:4:70",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 19653,
                "name": "no_transfer_fee",
                "nodeType": "VariableDeclaration",
                "scope": 19654,
                "src": "806:20:70",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bool",
                  "typeString": "bool"
                },
                "typeName": {
                  "id": 19652,
                  "name": "bool",
                  "nodeType": "ElementaryTypeName",
                  "src": "806:4:70",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "UserConfig",
            "nodeType": "StructDefinition",
            "scope": 21192,
            "src": "755:76:70",
            "visibility": "public"
          },
          {
            "canonicalName": "DummyDGXStorage.UserData",
            "id": 19663,
            "members": [
              {
                "constant": false,
                "id": 19656,
                "name": "last_payment_date",
                "nodeType": "VariableDeclaration",
                "scope": 19663,
                "src": "857:25:70",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 19655,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "857:7:70",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 19658,
                "name": "raw_balance",
                "nodeType": "VariableDeclaration",
                "scope": 19663,
                "src": "888:19:70",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 19657,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "888:7:70",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 19662,
                "name": "spender_allowances",
                "nodeType": "VariableDeclaration",
                "scope": 19663,
                "src": "913:47:70",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                  "typeString": "mapping(address => uint256)"
                },
                "typeName": {
                  "id": 19661,
                  "keyType": {
                    "id": 19659,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "922:7:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "Mapping",
                  "src": "913:28:70",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                    "typeString": "mapping(address => uint256)"
                  },
                  "valueType": {
                    "id": 19660,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "933:7:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "UserData",
            "nodeType": "StructDefinition",
            "scope": 21192,
            "src": "835:130:70",
            "visibility": "public"
          },
          {
            "canonicalName": "DummyDGXStorage.User",
            "id": 19668,
            "members": [
              {
                "constant": false,
                "id": 19665,
                "name": "config",
                "nodeType": "VariableDeclaration",
                "scope": 19668,
                "src": "987:17:70",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_UserConfig_$19654_storage_ptr",
                  "typeString": "struct DummyDGXStorage.UserConfig"
                },
                "typeName": {
                  "contractScope": null,
                  "id": 19664,
                  "name": "UserConfig",
                  "nodeType": "UserDefinedTypeName",
                  "referencedDeclaration": 19654,
                  "src": "987:10:70",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_UserConfig_$19654_storage_ptr",
                    "typeString": "struct DummyDGXStorage.UserConfig"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 19667,
                "name": "data",
                "nodeType": "VariableDeclaration",
                "scope": 19668,
                "src": "1010:13:70",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_UserData_$19663_storage_ptr",
                  "typeString": "struct DummyDGXStorage.UserData"
                },
                "typeName": {
                  "contractScope": null,
                  "id": 19666,
                  "name": "UserData",
                  "nodeType": "UserDefinedTypeName",
                  "referencedDeclaration": 19663,
                  "src": "1010:8:70",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_UserData_$19663_storage_ptr",
                    "typeString": "struct DummyDGXStorage.UserData"
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "User",
            "nodeType": "StructDefinition",
            "scope": 21192,
            "src": "969:59:70",
            "visibility": "public"
          },
          {
            "canonicalName": "DummyDGXStorage.System",
            "id": 19679,
            "members": [
              {
                "constant": false,
                "id": 19670,
                "name": "collectors",
                "nodeType": "VariableDeclaration",
                "scope": 19679,
                "src": "1052:21:70",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_Collectors_$19649_storage_ptr",
                  "typeString": "struct DummyDGXStorage.Collectors"
                },
                "typeName": {
                  "contractScope": null,
                  "id": 19669,
                  "name": "Collectors",
                  "nodeType": "UserDefinedTypeName",
                  "referencedDeclaration": 19649,
                  "src": "1052:10:70",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Collectors_$19649_storage_ptr",
                    "typeString": "struct DummyDGXStorage.Collectors"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 19672,
                "name": "config",
                "nodeType": "VariableDeclaration",
                "scope": 19679,
                "src": "1079:19:70",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_GlobalConfig_$19639_storage_ptr",
                  "typeString": "struct DummyDGXStorage.GlobalConfig"
                },
                "typeName": {
                  "contractScope": null,
                  "id": 19671,
                  "name": "GlobalConfig",
                  "nodeType": "UserDefinedTypeName",
                  "referencedDeclaration": 19639,
                  "src": "1079:12:70",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_GlobalConfig_$19639_storage_ptr",
                    "typeString": "struct DummyDGXStorage.GlobalConfig"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 19674,
                "name": "total_supply",
                "nodeType": "VariableDeclaration",
                "scope": 19679,
                "src": "1104:20:70",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 19673,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "1104:7:70",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 19678,
                "name": "users",
                "nodeType": "VariableDeclaration",
                "scope": 19679,
                "src": "1130:31:70",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_mapping$_t_address_$_t_struct$_User_$19668_storage_$",
                  "typeString": "mapping(address => struct DummyDGXStorage.User)"
                },
                "typeName": {
                  "id": 19677,
                  "keyType": {
                    "id": 19675,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1139:7:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "Mapping",
                  "src": "1130:25:70",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_address_$_t_struct$_User_$19668_storage_$",
                    "typeString": "mapping(address => struct DummyDGXStorage.User)"
                  },
                  "valueType": {
                    "contractScope": null,
                    "id": 19676,
                    "name": "User",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 19668,
                    "src": "1150:4:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_User_$19668_storage_ptr",
                      "typeString": "struct DummyDGXStorage.User"
                    }
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "System",
            "nodeType": "StructDefinition",
            "scope": 21192,
            "src": "1032:134:70",
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 19681,
            "name": "system",
            "nodeType": "VariableDeclaration",
            "scope": 21192,
            "src": "1170:13:70",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_struct$_System_$19679_storage",
              "typeString": "struct DummyDGXStorage.System"
            },
            "typeName": {
              "contractScope": null,
              "id": 19680,
              "name": "System",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 19679,
              "src": "1170:6:70",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_System_$19679_storage_ptr",
                "typeString": "struct DummyDGXStorage.System"
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 19683,
            "name": "ROOT",
            "nodeType": "VariableDeclaration",
            "scope": 21192,
            "src": "1187:12:70",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 19682,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "1187:7:70",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 19685,
            "name": "DGX_INTERACTIVE_ADDRESS",
            "nodeType": "VariableDeclaration",
            "scope": 21192,
            "src": "1203:31:70",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 19684,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "1203:7:70",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 19786,
              "nodeType": "Block",
              "src": "1266:602:70",
              "statements": [
                {
                  "assignments": [],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 19689,
                      "name": "_demurrage_collector",
                      "nodeType": "VariableDeclaration",
                      "scope": 19787,
                      "src": "1272:28:70",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 19688,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "1272:7:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 19690,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1272:28:70"
                },
                {
                  "assignments": [],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 19692,
                      "name": "_transfer_collector",
                      "nodeType": "VariableDeclaration",
                      "scope": 19787,
                      "src": "1306:27:70",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 19691,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "1306:7:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 19693,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1306:27:70"
                },
                {
                  "externalReferences": [
                    {
                      "_demurrage_collector": {
                        "declaration": 19689,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "1356:20:70",
                        "valueSize": 1
                      }
                    },
                    {
                      "_transfer_collector": {
                        "declaration": 19692,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "1400:19:70",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 19694,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    _demurrage_collector := create(0, 0, 0)\n    _transfer_collector := create(0, 0, 0)\n}",
                  "src": "1339:115:70"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 19705,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 19695,
                              "name": "system",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 19681,
                              "src": "1448:6:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_System_$19679_storage",
                                "typeString": "struct DummyDGXStorage.System storage ref"
                              }
                            },
                            "id": 19700,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "config",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 19672,
                            "src": "1448:13:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_GlobalConfig_$19639_storage",
                              "typeString": "struct DummyDGXStorage.GlobalConfig storage ref"
                            }
                          },
                          "id": 19701,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "fees",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 19638,
                          "src": "1448:18:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Fees_$19644_storage",
                            "typeString": "struct DummyDGXStorage.Fees storage ref"
                          }
                        },
                        "id": 19702,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "demurrage",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 19641,
                        "src": "1448:28:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_FeeConfiguration_$19628_storage",
                          "typeString": "struct DummyDGXStorage.FeeConfiguration storage ref"
                        }
                      },
                      "id": 19703,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "base",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 19625,
                      "src": "1448:33:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "3130303030303030",
                      "id": 19704,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "1484:8:70",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_10000000_by_1",
                        "typeString": "int_const 10000000"
                      },
                      "value": "10000000"
                    },
                    "src": "1448:44:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 19706,
                  "nodeType": "ExpressionStatement",
                  "src": "1448:44:70"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 19717,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 19707,
                              "name": "system",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 19681,
                              "src": "1498:6:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_System_$19679_storage",
                                "typeString": "struct DummyDGXStorage.System storage ref"
                              }
                            },
                            "id": 19712,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "config",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 19672,
                            "src": "1498:13:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_GlobalConfig_$19639_storage",
                              "typeString": "struct DummyDGXStorage.GlobalConfig storage ref"
                            }
                          },
                          "id": 19713,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "fees",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 19638,
                          "src": "1498:18:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Fees_$19644_storage",
                            "typeString": "struct DummyDGXStorage.Fees storage ref"
                          }
                        },
                        "id": 19714,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "demurrage",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 19641,
                        "src": "1498:28:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_FeeConfiguration_$19628_storage",
                          "typeString": "struct DummyDGXStorage.FeeConfiguration storage ref"
                        }
                      },
                      "id": 19715,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "rate",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 19627,
                      "src": "1498:33:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "313635",
                      "id": 19716,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "1534:3:70",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_165_by_1",
                        "typeString": "int_const 165"
                      },
                      "value": "165"
                    },
                    "src": "1498:39:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 19718,
                  "nodeType": "ExpressionStatement",
                  "src": "1498:39:70"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 19729,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 19719,
                              "name": "system",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 19681,
                              "src": "1543:6:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_System_$19679_storage",
                                "typeString": "struct DummyDGXStorage.System storage ref"
                              }
                            },
                            "id": 19724,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "config",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 19672,
                            "src": "1543:13:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_GlobalConfig_$19639_storage",
                              "typeString": "struct DummyDGXStorage.GlobalConfig storage ref"
                            }
                          },
                          "id": 19725,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "fees",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 19638,
                          "src": "1543:18:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Fees_$19644_storage",
                            "typeString": "struct DummyDGXStorage.Fees storage ref"
                          }
                        },
                        "id": 19726,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "transfer",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 19643,
                        "src": "1543:27:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_FeeConfiguration_$19628_storage",
                          "typeString": "struct DummyDGXStorage.FeeConfiguration storage ref"
                        }
                      },
                      "id": 19727,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "base",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 19625,
                      "src": "1543:32:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "3130303030",
                      "id": 19728,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "1578:5:70",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_10000_by_1",
                        "typeString": "int_const 10000"
                      },
                      "value": "10000"
                    },
                    "src": "1543:40:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 19730,
                  "nodeType": "ExpressionStatement",
                  "src": "1543:40:70"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 19741,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 19731,
                              "name": "system",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 19681,
                              "src": "1589:6:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_System_$19679_storage",
                                "typeString": "struct DummyDGXStorage.System storage ref"
                              }
                            },
                            "id": 19736,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "config",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 19672,
                            "src": "1589:13:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_GlobalConfig_$19639_storage",
                              "typeString": "struct DummyDGXStorage.GlobalConfig storage ref"
                            }
                          },
                          "id": 19737,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "fees",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 19638,
                          "src": "1589:18:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Fees_$19644_storage",
                            "typeString": "struct DummyDGXStorage.Fees storage ref"
                          }
                        },
                        "id": 19738,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "transfer",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 19643,
                        "src": "1589:27:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_FeeConfiguration_$19628_storage",
                          "typeString": "struct DummyDGXStorage.FeeConfiguration storage ref"
                        }
                      },
                      "id": 19739,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "rate",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 19627,
                      "src": "1589:32:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "3133",
                      "id": 19740,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "1624:2:70",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_13_by_1",
                        "typeString": "int_const 13"
                      },
                      "value": "13"
                    },
                    "src": "1589:37:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 19742,
                  "nodeType": "ExpressionStatement",
                  "src": "1589:37:70"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 19749,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 19743,
                          "name": "system",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 19681,
                          "src": "1632:6:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_System_$19679_storage",
                            "typeString": "struct DummyDGXStorage.System storage ref"
                          }
                        },
                        "id": 19746,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "config",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 19672,
                        "src": "1632:13:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_GlobalConfig_$19639_storage",
                          "typeString": "struct DummyDGXStorage.GlobalConfig storage ref"
                        }
                      },
                      "id": 19747,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "minimum_transfer_amount",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 19636,
                      "src": "1632:37:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "31303030303030",
                      "id": 19748,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "1672:7:70",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1000000_by_1",
                        "typeString": "int_const 1000000"
                      },
                      "value": "1000000"
                    },
                    "src": "1632:47:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 19750,
                  "nodeType": "ExpressionStatement",
                  "src": "1632:47:70"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 19757,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 19751,
                          "name": "system",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 19681,
                          "src": "1685:6:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_System_$19679_storage",
                            "typeString": "struct DummyDGXStorage.System storage ref"
                          }
                        },
                        "id": 19754,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "config",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 19672,
                        "src": "1685:13:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_GlobalConfig_$19639_storage",
                          "typeString": "struct DummyDGXStorage.GlobalConfig storage ref"
                        }
                      },
                      "id": 19755,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "no_demurrage_fee",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 19632,
                      "src": "1685:30:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "66616c7365",
                      "id": 19756,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "1718:5:70",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "false"
                    },
                    "src": "1685:38:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 19758,
                  "nodeType": "ExpressionStatement",
                  "src": "1685:38:70"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 19765,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 19759,
                          "name": "system",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 19681,
                          "src": "1729:6:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_System_$19679_storage",
                            "typeString": "struct DummyDGXStorage.System storage ref"
                          }
                        },
                        "id": 19762,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "config",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 19672,
                        "src": "1729:13:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_GlobalConfig_$19639_storage",
                          "typeString": "struct DummyDGXStorage.GlobalConfig storage ref"
                        }
                      },
                      "id": 19763,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "no_transfer_fee",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 19634,
                      "src": "1729:29:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "66616c7365",
                      "id": 19764,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "1761:5:70",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "false"
                    },
                    "src": "1729:37:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 19766,
                  "nodeType": "ExpressionStatement",
                  "src": "1729:37:70"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 19773,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 19767,
                          "name": "system",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 19681,
                          "src": "1772:6:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_System_$19679_storage",
                            "typeString": "struct DummyDGXStorage.System storage ref"
                          }
                        },
                        "id": 19770,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "config",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 19672,
                        "src": "1772:13:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_GlobalConfig_$19639_storage",
                          "typeString": "struct DummyDGXStorage.GlobalConfig storage ref"
                        }
                      },
                      "id": 19771,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "current_version",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 19630,
                      "src": "1772:29:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "312e302e30",
                      "id": 19772,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "string",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "1804:7:70",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_stringliteral_06c015bd22b4c69690933c1058878ebdfef31f9aaae40bbe86d8a09fe1b2972c",
                        "typeString": "literal_string \"1.0.0\""
                      },
                      "value": "1.0.0"
                    },
                    "src": "1772:39:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 19774,
                  "nodeType": "ExpressionStatement",
                  "src": "1772:39:70"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 19779,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 19775,
                        "name": "system",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 19681,
                        "src": "1817:6:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_System_$19679_storage",
                          "typeString": "struct DummyDGXStorage.System storage ref"
                        }
                      },
                      "id": 19777,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "total_supply",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 19674,
                      "src": "1817:19:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 19778,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "1839:1:70",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "1817:23:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 19780,
                  "nodeType": "ExpressionStatement",
                  "src": "1817:23:70"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 19784,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 19781,
                      "name": "ROOT",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19683,
                      "src": "1846:4:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 19782,
                        "name": "msg",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 26182,
                        "src": "1853:3:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_message",
                          "typeString": "msg"
                        }
                      },
                      "id": 19783,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sender",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "1853:10:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "1846:17:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 19785,
                  "nodeType": "ExpressionStatement",
                  "src": "1846:17:70"
                }
              ]
            },
            "documentation": null,
            "id": 19787,
            "implemented": true,
            "isConstructor": true,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 19686,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1250:2:70"
            },
            "payable": false,
            "returnParameters": {
              "id": 19687,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1266:0:70"
            },
            "scope": 21192,
            "src": "1239:629:70",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 19798,
              "nodeType": "Block",
              "src": "1953:57:70",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 19796,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 19794,
                      "name": "DGX_INTERACTIVE_ADDRESS",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19685,
                      "src": "1959:23:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 19795,
                      "name": "_DummyDGXInteractive",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19789,
                      "src": "1985:20:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "1959:46:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 19797,
                  "nodeType": "ExpressionStatement",
                  "src": "1959:46:70"
                }
              ]
            },
            "documentation": null,
            "id": 19799,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [],
                "id": 19792,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 19791,
                  "name": "if_root",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 19810,
                  "src": "1941:7:70",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1941:9:70"
              }
            ],
            "name": "setInteractive",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 19790,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 19789,
                  "name": "_DummyDGXInteractive",
                  "nodeType": "VariableDeclaration",
                  "scope": 19799,
                  "src": "1896:28:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 19788,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1896:7:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1895:30:70"
            },
            "payable": false,
            "returnParameters": {
              "id": 19793,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1953:0:70"
            },
            "scope": 21192,
            "src": "1872:138:70",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 19809,
              "nodeType": "Block",
              "src": "2033:45:70",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 19805,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 19802,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 26182,
                            "src": "2047:3:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 19803,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "2047:10:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 19804,
                          "name": "ROOT",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 19683,
                          "src": "2061:4:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "2047:18:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 19801,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        26185,
                        26186
                      ],
                      "referencedDeclaration": 26185,
                      "src": "2039:7:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 19806,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2039:27:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 19807,
                  "nodeType": "ExpressionStatement",
                  "src": "2039:27:70"
                },
                {
                  "id": 19808,
                  "nodeType": "PlaceholderStatement",
                  "src": "2072:1:70"
                }
              ]
            },
            "documentation": null,
            "id": 19810,
            "name": "if_root",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 19800,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2030:2:70"
            },
            "src": "2014:64:70",
            "visibility": "internal"
          },
          {
            "body": {
              "id": 19820,
              "nodeType": "Block",
              "src": "2112:64:70",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 19816,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 19813,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 26182,
                            "src": "2126:3:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 19814,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "2126:10:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 19815,
                          "name": "DGX_INTERACTIVE_ADDRESS",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 19685,
                          "src": "2140:23:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "2126:37:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 19812,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        26185,
                        26186
                      ],
                      "referencedDeclaration": 26185,
                      "src": "2118:7:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 19817,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2118:46:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 19818,
                  "nodeType": "ExpressionStatement",
                  "src": "2118:46:70"
                },
                {
                  "id": 19819,
                  "nodeType": "PlaceholderStatement",
                  "src": "2170:1:70"
                }
              ]
            },
            "documentation": null,
            "id": 19821,
            "name": "if_dgx_interactive",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 19811,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2109:2:70"
            },
            "src": "2082:94:70",
            "visibility": "internal"
          },
          {
            "body": {
              "id": 19883,
              "nodeType": "Block",
              "src": "2441:395:70",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 19841,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 19832,
                      "name": "_collector_balance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19824,
                      "src": "2447:18:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 19833,
                              "name": "system",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 19681,
                              "src": "2468:6:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_System_$19679_storage",
                                "typeString": "struct DummyDGXStorage.System storage ref"
                              }
                            },
                            "id": 19834,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "users",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 19678,
                            "src": "2468:12:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_struct$_User_$19668_storage_$",
                              "typeString": "mapping(address => struct DummyDGXStorage.User storage ref)"
                            }
                          },
                          "id": 19838,
                          "indexExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 19835,
                                "name": "system",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 19681,
                                "src": "2481:6:70",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_System_$19679_storage",
                                  "typeString": "struct DummyDGXStorage.System storage ref"
                                }
                              },
                              "id": 19836,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "collectors",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 19670,
                              "src": "2481:17:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Collectors_$19649_storage",
                                "typeString": "struct DummyDGXStorage.Collectors storage ref"
                              }
                            },
                            "id": 19837,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "demurrage",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 19646,
                            "src": "2481:27:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "2468:41:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_User_$19668_storage",
                            "typeString": "struct DummyDGXStorage.User storage ref"
                          }
                        },
                        "id": 19839,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "data",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 19667,
                        "src": "2468:46:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_UserData_$19663_storage",
                          "typeString": "struct DummyDGXStorage.UserData storage ref"
                        }
                      },
                      "id": 19840,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "raw_balance",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 19658,
                      "src": "2468:58:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2447:79:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 19842,
                  "nodeType": "ExpressionStatement",
                  "src": "2447:79:70"
                },
                {
                  "assignments": [
                    19844
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 19844,
                      "name": "_global_demurrage_disabled",
                      "nodeType": "VariableDeclaration",
                      "scope": 19884,
                      "src": "2532:31:70",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 19843,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "2532:4:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 19848,
                  "initialValue": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 19845,
                        "name": "system",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 19681,
                        "src": "2566:6:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_System_$19679_storage",
                          "typeString": "struct DummyDGXStorage.System storage ref"
                        }
                      },
                      "id": 19846,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "config",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 19672,
                      "src": "2566:13:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_GlobalConfig_$19639_storage",
                        "typeString": "struct DummyDGXStorage.GlobalConfig storage ref"
                      }
                    },
                    "id": 19847,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "no_demurrage_fee",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 19632,
                    "src": "2566:30:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2532:64:70"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 19853,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 19849,
                      "name": "_collector",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19830,
                      "src": "2602:10:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 19850,
                          "name": "system",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 19681,
                          "src": "2615:6:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_System_$19679_storage",
                            "typeString": "struct DummyDGXStorage.System storage ref"
                          }
                        },
                        "id": 19851,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "collectors",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 19670,
                        "src": "2615:17:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Collectors_$19649_storage",
                          "typeString": "struct DummyDGXStorage.Collectors storage ref"
                        }
                      },
                      "id": 19852,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "demurrage",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 19646,
                      "src": "2615:27:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "2602:40:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 19854,
                  "nodeType": "ExpressionStatement",
                  "src": "2602:40:70"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "id": 19855,
                    "name": "_global_demurrage_disabled",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 19844,
                    "src": "2652:26:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 19881,
                    "nodeType": "Block",
                    "src": "2727:105:70",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 19871,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 19865,
                            "name": "_base",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 19826,
                            "src": "2735:5:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 19866,
                                    "name": "system",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 19681,
                                    "src": "2743:6:70",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_System_$19679_storage",
                                      "typeString": "struct DummyDGXStorage.System storage ref"
                                    }
                                  },
                                  "id": 19867,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "config",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 19672,
                                  "src": "2743:13:70",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_GlobalConfig_$19639_storage",
                                    "typeString": "struct DummyDGXStorage.GlobalConfig storage ref"
                                  }
                                },
                                "id": 19868,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "fees",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 19638,
                                "src": "2743:18:70",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Fees_$19644_storage",
                                  "typeString": "struct DummyDGXStorage.Fees storage ref"
                                }
                              },
                              "id": 19869,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "demurrage",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 19641,
                              "src": "2743:28:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_FeeConfiguration_$19628_storage",
                                "typeString": "struct DummyDGXStorage.FeeConfiguration storage ref"
                              }
                            },
                            "id": 19870,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "base",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 19625,
                            "src": "2743:33:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "2735:41:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 19872,
                        "nodeType": "ExpressionStatement",
                        "src": "2735:41:70"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 19879,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 19873,
                            "name": "_rate",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 19828,
                            "src": "2784:5:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 19874,
                                    "name": "system",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 19681,
                                    "src": "2792:6:70",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_System_$19679_storage",
                                      "typeString": "struct DummyDGXStorage.System storage ref"
                                    }
                                  },
                                  "id": 19875,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "config",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 19672,
                                  "src": "2792:13:70",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_GlobalConfig_$19639_storage",
                                    "typeString": "struct DummyDGXStorage.GlobalConfig storage ref"
                                  }
                                },
                                "id": 19876,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "fees",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 19638,
                                "src": "2792:18:70",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Fees_$19644_storage",
                                  "typeString": "struct DummyDGXStorage.Fees storage ref"
                                }
                              },
                              "id": 19877,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "demurrage",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 19641,
                              "src": "2792:28:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_FeeConfiguration_$19628_storage",
                                "typeString": "struct DummyDGXStorage.FeeConfiguration storage ref"
                              }
                            },
                            "id": 19878,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "rate",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 19627,
                            "src": "2792:33:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "2784:41:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 19880,
                        "nodeType": "ExpressionStatement",
                        "src": "2784:41:70"
                      }
                    ]
                  },
                  "id": 19882,
                  "nodeType": "IfStatement",
                  "src": "2648:184:70",
                  "trueBody": {
                    "id": 19864,
                    "nodeType": "Block",
                    "src": "2680:41:70",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 19858,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 19856,
                            "name": "_base",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 19826,
                            "src": "2688:5:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 19857,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2696:1:70",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "2688:9:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 19859,
                        "nodeType": "ExpressionStatement",
                        "src": "2688:9:70"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 19862,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 19860,
                            "name": "_rate",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 19828,
                            "src": "2705:5:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 19861,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2713:1:70",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "2705:9:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 19863,
                        "nodeType": "ExpressionStatement",
                        "src": "2705:9:70"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": "//////////////////////////// PUBLIC FUNCTIONS ////////////////////////////",
            "id": 19884,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "read_demurrage_config",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 19822,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2291:2:70"
            },
            "payable": false,
            "returnParameters": {
              "id": 19831,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 19824,
                  "name": "_collector_balance",
                  "nodeType": "VariableDeclaration",
                  "scope": 19884,
                  "src": "2338:26:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 19823,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2338:7:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 19826,
                  "name": "_base",
                  "nodeType": "VariableDeclaration",
                  "scope": 19884,
                  "src": "2372:13:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 19825,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2372:7:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 19828,
                  "name": "_rate",
                  "nodeType": "VariableDeclaration",
                  "scope": 19884,
                  "src": "2393:13:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 19827,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2393:7:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 19830,
                  "name": "_collector",
                  "nodeType": "VariableDeclaration",
                  "scope": 19884,
                  "src": "2414:18:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 19829,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2414:7:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2330:108:70"
            },
            "scope": 21192,
            "src": "2261:575:70",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 19923,
              "nodeType": "Block",
              "src": "3027:201:70",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 19901,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 19895,
                      "name": "_base",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19887,
                      "src": "3033:5:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 19896,
                              "name": "system",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 19681,
                              "src": "3041:6:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_System_$19679_storage",
                                "typeString": "struct DummyDGXStorage.System storage ref"
                              }
                            },
                            "id": 19897,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "config",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 19672,
                            "src": "3041:13:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_GlobalConfig_$19639_storage",
                              "typeString": "struct DummyDGXStorage.GlobalConfig storage ref"
                            }
                          },
                          "id": 19898,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "fees",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 19638,
                          "src": "3041:18:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Fees_$19644_storage",
                            "typeString": "struct DummyDGXStorage.Fees storage ref"
                          }
                        },
                        "id": 19899,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "demurrage",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 19641,
                        "src": "3041:28:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_FeeConfiguration_$19628_storage",
                          "typeString": "struct DummyDGXStorage.FeeConfiguration storage ref"
                        }
                      },
                      "id": 19900,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "base",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 19625,
                      "src": "3041:33:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3033:41:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 19902,
                  "nodeType": "ExpressionStatement",
                  "src": "3033:41:70"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 19909,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 19903,
                      "name": "_rate",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19889,
                      "src": "3080:5:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 19904,
                              "name": "system",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 19681,
                              "src": "3088:6:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_System_$19679_storage",
                                "typeString": "struct DummyDGXStorage.System storage ref"
                              }
                            },
                            "id": 19905,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "config",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 19672,
                            "src": "3088:13:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_GlobalConfig_$19639_storage",
                              "typeString": "struct DummyDGXStorage.GlobalConfig storage ref"
                            }
                          },
                          "id": 19906,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "fees",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 19638,
                          "src": "3088:18:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Fees_$19644_storage",
                            "typeString": "struct DummyDGXStorage.Fees storage ref"
                          }
                        },
                        "id": 19907,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "demurrage",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 19641,
                        "src": "3088:28:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_FeeConfiguration_$19628_storage",
                          "typeString": "struct DummyDGXStorage.FeeConfiguration storage ref"
                        }
                      },
                      "id": 19908,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "rate",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 19627,
                      "src": "3088:33:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3080:41:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 19910,
                  "nodeType": "ExpressionStatement",
                  "src": "3080:41:70"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 19915,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 19911,
                      "name": "_collector",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19891,
                      "src": "3127:10:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 19912,
                          "name": "system",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 19681,
                          "src": "3140:6:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_System_$19679_storage",
                            "typeString": "struct DummyDGXStorage.System storage ref"
                          }
                        },
                        "id": 19913,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "collectors",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 19670,
                        "src": "3140:17:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Collectors_$19649_storage",
                          "typeString": "struct DummyDGXStorage.Collectors storage ref"
                        }
                      },
                      "id": 19914,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "demurrage",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 19646,
                      "src": "3140:27:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "3127:40:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 19916,
                  "nodeType": "ExpressionStatement",
                  "src": "3127:40:70"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 19921,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 19917,
                      "name": "_no_demurrage_fee",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19893,
                      "src": "3173:17:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 19918,
                          "name": "system",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 19681,
                          "src": "3193:6:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_System_$19679_storage",
                            "typeString": "struct DummyDGXStorage.System storage ref"
                          }
                        },
                        "id": 19919,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "config",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 19672,
                        "src": "3193:13:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_GlobalConfig_$19639_storage",
                          "typeString": "struct DummyDGXStorage.GlobalConfig storage ref"
                        }
                      },
                      "id": 19920,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "no_demurrage_fee",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 19632,
                      "src": "3193:30:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "3173:50:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 19922,
                  "nodeType": "ExpressionStatement",
                  "src": "3173:50:70"
                }
              ]
            },
            "documentation": null,
            "id": 19924,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "read_demurrage_config_underlying",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 19885,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2881:2:70"
            },
            "payable": false,
            "returnParameters": {
              "id": 19894,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 19887,
                  "name": "_base",
                  "nodeType": "VariableDeclaration",
                  "scope": 19924,
                  "src": "2928:13:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 19886,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2928:7:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 19889,
                  "name": "_rate",
                  "nodeType": "VariableDeclaration",
                  "scope": 19924,
                  "src": "2949:13:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 19888,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2949:7:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 19891,
                  "name": "_collector",
                  "nodeType": "VariableDeclaration",
                  "scope": 19924,
                  "src": "2970:18:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 19890,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2970:7:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 19893,
                  "name": "_no_demurrage_fee",
                  "nodeType": "VariableDeclaration",
                  "scope": 19924,
                  "src": "2996:22:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 19892,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "2996:4:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2920:104:70"
            },
            "scope": 21192,
            "src": "2840:388:70",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 19984,
              "nodeType": "Block",
              "src": "3480:350:70",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 19948,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 19939,
                      "name": "_collector_balance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19927,
                      "src": "3486:18:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 19940,
                              "name": "system",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 19681,
                              "src": "3507:6:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_System_$19679_storage",
                                "typeString": "struct DummyDGXStorage.System storage ref"
                              }
                            },
                            "id": 19941,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "users",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 19678,
                            "src": "3507:12:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_struct$_User_$19668_storage_$",
                              "typeString": "mapping(address => struct DummyDGXStorage.User storage ref)"
                            }
                          },
                          "id": 19945,
                          "indexExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 19942,
                                "name": "system",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 19681,
                                "src": "3520:6:70",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_System_$19679_storage",
                                  "typeString": "struct DummyDGXStorage.System storage ref"
                                }
                              },
                              "id": 19943,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "collectors",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 19670,
                              "src": "3520:17:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Collectors_$19649_storage",
                                "typeString": "struct DummyDGXStorage.Collectors storage ref"
                              }
                            },
                            "id": 19944,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "transfer",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 19648,
                            "src": "3520:26:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "3507:40:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_User_$19668_storage",
                            "typeString": "struct DummyDGXStorage.User storage ref"
                          }
                        },
                        "id": 19946,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "data",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 19667,
                        "src": "3507:45:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_UserData_$19663_storage",
                          "typeString": "struct DummyDGXStorage.UserData storage ref"
                        }
                      },
                      "id": 19947,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "raw_balance",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 19658,
                      "src": "3507:57:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3486:78:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 19949,
                  "nodeType": "ExpressionStatement",
                  "src": "3486:78:70"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 19956,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 19950,
                      "name": "_base",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19929,
                      "src": "3570:5:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 19951,
                              "name": "system",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 19681,
                              "src": "3578:6:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_System_$19679_storage",
                                "typeString": "struct DummyDGXStorage.System storage ref"
                              }
                            },
                            "id": 19952,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "config",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 19672,
                            "src": "3578:13:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_GlobalConfig_$19639_storage",
                              "typeString": "struct DummyDGXStorage.GlobalConfig storage ref"
                            }
                          },
                          "id": 19953,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "fees",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 19638,
                          "src": "3578:18:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Fees_$19644_storage",
                            "typeString": "struct DummyDGXStorage.Fees storage ref"
                          }
                        },
                        "id": 19954,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "transfer",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 19643,
                        "src": "3578:27:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_FeeConfiguration_$19628_storage",
                          "typeString": "struct DummyDGXStorage.FeeConfiguration storage ref"
                        }
                      },
                      "id": 19955,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "base",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 19625,
                      "src": "3578:32:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3570:40:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 19957,
                  "nodeType": "ExpressionStatement",
                  "src": "3570:40:70"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 19964,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 19958,
                      "name": "_rate",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19931,
                      "src": "3616:5:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 19959,
                              "name": "system",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 19681,
                              "src": "3624:6:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_System_$19679_storage",
                                "typeString": "struct DummyDGXStorage.System storage ref"
                              }
                            },
                            "id": 19960,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "config",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 19672,
                            "src": "3624:13:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_GlobalConfig_$19639_storage",
                              "typeString": "struct DummyDGXStorage.GlobalConfig storage ref"
                            }
                          },
                          "id": 19961,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "fees",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 19638,
                          "src": "3624:18:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Fees_$19644_storage",
                            "typeString": "struct DummyDGXStorage.Fees storage ref"
                          }
                        },
                        "id": 19962,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "transfer",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 19643,
                        "src": "3624:27:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_FeeConfiguration_$19628_storage",
                          "typeString": "struct DummyDGXStorage.FeeConfiguration storage ref"
                        }
                      },
                      "id": 19963,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "rate",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 19627,
                      "src": "3624:32:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3616:40:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 19965,
                  "nodeType": "ExpressionStatement",
                  "src": "3616:40:70"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 19970,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 19966,
                      "name": "_collector",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19933,
                      "src": "3662:10:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 19967,
                          "name": "system",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 19681,
                          "src": "3675:6:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_System_$19679_storage",
                            "typeString": "struct DummyDGXStorage.System storage ref"
                          }
                        },
                        "id": 19968,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "collectors",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 19670,
                        "src": "3675:17:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Collectors_$19649_storage",
                          "typeString": "struct DummyDGXStorage.Collectors storage ref"
                        }
                      },
                      "id": 19969,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "transfer",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 19648,
                      "src": "3675:26:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "3662:39:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 19971,
                  "nodeType": "ExpressionStatement",
                  "src": "3662:39:70"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 19976,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 19972,
                      "name": "_no_transfer_fee",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19935,
                      "src": "3707:16:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 19973,
                          "name": "system",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 19681,
                          "src": "3726:6:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_System_$19679_storage",
                            "typeString": "struct DummyDGXStorage.System storage ref"
                          }
                        },
                        "id": 19974,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "config",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 19672,
                        "src": "3726:13:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_GlobalConfig_$19639_storage",
                          "typeString": "struct DummyDGXStorage.GlobalConfig storage ref"
                        }
                      },
                      "id": 19975,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "no_transfer_fee",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 19634,
                      "src": "3726:29:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "3707:48:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 19977,
                  "nodeType": "ExpressionStatement",
                  "src": "3707:48:70"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 19982,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 19978,
                      "name": "_minimum_transfer_amount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19937,
                      "src": "3761:24:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 19979,
                          "name": "system",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 19681,
                          "src": "3788:6:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_System_$19679_storage",
                            "typeString": "struct DummyDGXStorage.System storage ref"
                          }
                        },
                        "id": 19980,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "config",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 19672,
                        "src": "3788:13:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_GlobalConfig_$19639_storage",
                          "typeString": "struct DummyDGXStorage.GlobalConfig storage ref"
                        }
                      },
                      "id": 19981,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "minimum_transfer_amount",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 19636,
                      "src": "3788:37:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3761:64:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 19983,
                  "nodeType": "ExpressionStatement",
                  "src": "3761:64:70"
                }
              ]
            },
            "documentation": null,
            "id": 19985,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "read_transfer_config",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 19925,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3261:2:70"
            },
            "payable": false,
            "returnParameters": {
              "id": 19938,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 19927,
                  "name": "_collector_balance",
                  "nodeType": "VariableDeclaration",
                  "scope": 19985,
                  "src": "3308:26:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 19926,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3308:7:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 19929,
                  "name": "_base",
                  "nodeType": "VariableDeclaration",
                  "scope": 19985,
                  "src": "3342:13:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 19928,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3342:7:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 19931,
                  "name": "_rate",
                  "nodeType": "VariableDeclaration",
                  "scope": 19985,
                  "src": "3363:13:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 19930,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3363:7:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 19933,
                  "name": "_collector",
                  "nodeType": "VariableDeclaration",
                  "scope": 19985,
                  "src": "3384:18:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 19932,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3384:7:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 19935,
                  "name": "_no_transfer_fee",
                  "nodeType": "VariableDeclaration",
                  "scope": 19985,
                  "src": "3410:21:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 19934,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "3410:4:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 19937,
                  "name": "_minimum_transfer_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 19985,
                  "src": "3439:32:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 19936,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3439:7:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3300:177:70"
            },
            "scope": 21192,
            "src": "3232:598:70",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 20012,
              "nodeType": "Block",
              "src": "3968:135:70",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 20001,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 19994,
                      "name": "_raw_balance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19990,
                      "src": "3974:12:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 19995,
                              "name": "system",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 19681,
                              "src": "3989:6:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_System_$19679_storage",
                                "typeString": "struct DummyDGXStorage.System storage ref"
                              }
                            },
                            "id": 19996,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "users",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 19678,
                            "src": "3989:12:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_struct$_User_$19668_storage_$",
                              "typeString": "mapping(address => struct DummyDGXStorage.User storage ref)"
                            }
                          },
                          "id": 19998,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 19997,
                            "name": "_account",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 19987,
                            "src": "4002:8:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "3989:22:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_User_$19668_storage",
                            "typeString": "struct DummyDGXStorage.User storage ref"
                          }
                        },
                        "id": 19999,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "data",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 19667,
                        "src": "3989:27:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_UserData_$19663_storage",
                          "typeString": "struct DummyDGXStorage.UserData storage ref"
                        }
                      },
                      "id": 20000,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "raw_balance",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 19658,
                      "src": "3989:39:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3974:54:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 20002,
                  "nodeType": "ExpressionStatement",
                  "src": "3974:54:70"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 20010,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 20003,
                      "name": "_no_transfer_fee",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19992,
                      "src": "4034:16:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 20004,
                              "name": "system",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 19681,
                              "src": "4053:6:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_System_$19679_storage",
                                "typeString": "struct DummyDGXStorage.System storage ref"
                              }
                            },
                            "id": 20005,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "users",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 19678,
                            "src": "4053:12:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_struct$_User_$19668_storage_$",
                              "typeString": "mapping(address => struct DummyDGXStorage.User storage ref)"
                            }
                          },
                          "id": 20007,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 20006,
                            "name": "_account",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 19987,
                            "src": "4066:8:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "4053:22:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_User_$19668_storage",
                            "typeString": "struct DummyDGXStorage.User storage ref"
                          }
                        },
                        "id": 20008,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "config",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 19665,
                        "src": "4053:29:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_UserConfig_$19654_storage",
                          "typeString": "struct DummyDGXStorage.UserConfig storage ref"
                        }
                      },
                      "id": 20009,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "no_transfer_fee",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 19653,
                      "src": "4053:45:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "4034:64:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 20011,
                  "nodeType": "ExpressionStatement",
                  "src": "4034:64:70"
                }
              ]
            },
            "documentation": null,
            "id": 20013,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "read_user_for_transfer",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 19988,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 19987,
                  "name": "_account",
                  "nodeType": "VariableDeclaration",
                  "scope": 20013,
                  "src": "3866:16:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 19986,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3866:7:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3865:18:70"
            },
            "payable": false,
            "returnParameters": {
              "id": 19993,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 19990,
                  "name": "_raw_balance",
                  "nodeType": "VariableDeclaration",
                  "scope": 20013,
                  "src": "3921:20:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 19989,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3921:7:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 19992,
                  "name": "_no_transfer_fee",
                  "nodeType": "VariableDeclaration",
                  "scope": 20013,
                  "src": "3943:21:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 19991,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "3943:4:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3920:45:70"
            },
            "scope": 21192,
            "src": "3834:269:70",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 20055,
              "nodeType": "Block",
              "src": "4290:264:70",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 20031,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 20024,
                      "name": "_raw_balance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20018,
                      "src": "4296:12:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 20025,
                              "name": "system",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 19681,
                              "src": "4311:6:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_System_$19679_storage",
                                "typeString": "struct DummyDGXStorage.System storage ref"
                              }
                            },
                            "id": 20026,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "users",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 19678,
                            "src": "4311:12:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_struct$_User_$19668_storage_$",
                              "typeString": "mapping(address => struct DummyDGXStorage.User storage ref)"
                            }
                          },
                          "id": 20028,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 20027,
                            "name": "_account",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20015,
                            "src": "4324:8:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "4311:22:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_User_$19668_storage",
                            "typeString": "struct DummyDGXStorage.User storage ref"
                          }
                        },
                        "id": 20029,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "data",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 19667,
                        "src": "4311:27:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_UserData_$19663_storage",
                          "typeString": "struct DummyDGXStorage.UserData storage ref"
                        }
                      },
                      "id": 20030,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "raw_balance",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 19658,
                      "src": "4311:39:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "4296:54:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 20032,
                  "nodeType": "ExpressionStatement",
                  "src": "4296:54:70"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 20040,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 20033,
                      "name": "_payment_date",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20020,
                      "src": "4356:13:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 20034,
                              "name": "system",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 19681,
                              "src": "4372:6:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_System_$19679_storage",
                                "typeString": "struct DummyDGXStorage.System storage ref"
                              }
                            },
                            "id": 20035,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "users",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 19678,
                            "src": "4372:12:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_struct$_User_$19668_storage_$",
                              "typeString": "mapping(address => struct DummyDGXStorage.User storage ref)"
                            }
                          },
                          "id": 20037,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 20036,
                            "name": "_account",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20015,
                            "src": "4385:8:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "4372:22:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_User_$19668_storage",
                            "typeString": "struct DummyDGXStorage.User storage ref"
                          }
                        },
                        "id": 20038,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "data",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 19667,
                        "src": "4372:27:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_UserData_$19663_storage",
                          "typeString": "struct DummyDGXStorage.UserData storage ref"
                        }
                      },
                      "id": 20039,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "last_payment_date",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 19656,
                      "src": "4372:45:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "4356:61:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 20041,
                  "nodeType": "ExpressionStatement",
                  "src": "4356:61:70"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 20053,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 20042,
                      "name": "_no_demurrage_fee",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20022,
                      "src": "4423:17:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "id": 20052,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 20043,
                                "name": "system",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 19681,
                                "src": "4443:6:70",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_System_$19679_storage",
                                  "typeString": "struct DummyDGXStorage.System storage ref"
                                }
                              },
                              "id": 20044,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "users",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 19678,
                              "src": "4443:12:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_User_$19668_storage_$",
                                "typeString": "mapping(address => struct DummyDGXStorage.User storage ref)"
                              }
                            },
                            "id": 20046,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 20045,
                              "name": "_account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 20015,
                              "src": "4456:8:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "4443:22:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_User_$19668_storage",
                              "typeString": "struct DummyDGXStorage.User storage ref"
                            }
                          },
                          "id": 20047,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "config",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 19665,
                          "src": "4443:29:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_UserConfig_$19654_storage",
                            "typeString": "struct DummyDGXStorage.UserConfig storage ref"
                          }
                        },
                        "id": 20048,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "no_demurrage_fee",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 19651,
                        "src": "4443:46:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "||",
                      "rightExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 20049,
                            "name": "system",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 19681,
                            "src": "4519:6:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_System_$19679_storage",
                              "typeString": "struct DummyDGXStorage.System storage ref"
                            }
                          },
                          "id": 20050,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "config",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 19672,
                          "src": "4519:13:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_GlobalConfig_$19639_storage",
                            "typeString": "struct DummyDGXStorage.GlobalConfig storage ref"
                          }
                        },
                        "id": 20051,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "no_demurrage_fee",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 19632,
                        "src": "4519:30:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "src": "4443:106:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "4423:126:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 20054,
                  "nodeType": "ExpressionStatement",
                  "src": "4423:126:70"
                }
              ]
            },
            "documentation": null,
            "id": 20056,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "read_user_for_demurrage",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 20016,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20015,
                  "name": "_account",
                  "nodeType": "VariableDeclaration",
                  "scope": 20056,
                  "src": "4140:16:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 20014,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4140:7:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4139:18:70"
            },
            "payable": false,
            "returnParameters": {
              "id": 20023,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20018,
                  "name": "_raw_balance",
                  "nodeType": "VariableDeclaration",
                  "scope": 20056,
                  "src": "4202:20:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 20017,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4202:7:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 20020,
                  "name": "_payment_date",
                  "nodeType": "VariableDeclaration",
                  "scope": 20056,
                  "src": "4230:21:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 20019,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4230:7:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 20022,
                  "name": "_no_demurrage_fee",
                  "nodeType": "VariableDeclaration",
                  "scope": 20056,
                  "src": "4259:22:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 20021,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "4259:4:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4194:93:70"
            },
            "scope": 21192,
            "src": "4107:447:70",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 20066,
              "nodeType": "Block",
              "src": "4648:45:70",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 20064,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 20061,
                      "name": "_totalSupply",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20059,
                      "src": "4654:12:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 20062,
                        "name": "system",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 19681,
                        "src": "4669:6:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_System_$19679_storage",
                          "typeString": "struct DummyDGXStorage.System storage ref"
                        }
                      },
                      "id": 20063,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "total_supply",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 19674,
                      "src": "4669:19:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "4654:34:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 20065,
                  "nodeType": "ExpressionStatement",
                  "src": "4654:34:70"
                }
              ]
            },
            "documentation": null,
            "id": 20067,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "read_total_supply",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 20057,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4584:2:70"
            },
            "payable": false,
            "returnParameters": {
              "id": 20060,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20059,
                  "name": "_totalSupply",
                  "nodeType": "VariableDeclaration",
                  "scope": 20067,
                  "src": "4624:20:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 20058,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4624:7:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4623:22:70"
            },
            "scope": 21192,
            "src": "4558:135:70",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 20087,
              "nodeType": "Block",
              "src": "4814:78:70",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 20085,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 20076,
                      "name": "_allowance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20074,
                      "src": "4820:10:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 20077,
                                "name": "system",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 19681,
                                "src": "4833:6:70",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_System_$19679_storage",
                                  "typeString": "struct DummyDGXStorage.System storage ref"
                                }
                              },
                              "id": 20078,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "users",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 19678,
                              "src": "4833:12:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_User_$19668_storage_$",
                                "typeString": "mapping(address => struct DummyDGXStorage.User storage ref)"
                              }
                            },
                            "id": 20080,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 20079,
                              "name": "_owner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 20069,
                              "src": "4846:6:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "4833:20:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_User_$19668_storage",
                              "typeString": "struct DummyDGXStorage.User storage ref"
                            }
                          },
                          "id": 20081,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "data",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 19667,
                          "src": "4833:25:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_UserData_$19663_storage",
                            "typeString": "struct DummyDGXStorage.UserData storage ref"
                          }
                        },
                        "id": 20082,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "spender_allowances",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 19662,
                        "src": "4833:44:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 20084,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 20083,
                        "name": "_spender",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20071,
                        "src": "4878:8:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "4833:54:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "4820:67:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 20086,
                  "nodeType": "ExpressionStatement",
                  "src": "4820:67:70"
                }
              ]
            },
            "documentation": null,
            "id": 20088,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "read_allowance",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 20072,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20069,
                  "name": "_owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 20088,
                  "src": "4721:14:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 20068,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4721:7:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 20071,
                  "name": "_spender",
                  "nodeType": "VariableDeclaration",
                  "scope": 20088,
                  "src": "4737:16:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 20070,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4737:7:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4720:34:70"
            },
            "payable": false,
            "returnParameters": {
              "id": 20075,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20074,
                  "name": "_allowance",
                  "nodeType": "VariableDeclaration",
                  "scope": 20088,
                  "src": "4792:18:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 20073,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4792:7:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4791:20:70"
            },
            "scope": 21192,
            "src": "4697:195:70",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 20115,
              "nodeType": "Block",
              "src": "5050:147:70",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 20104,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 20097,
                      "name": "_no_demurrage_fee",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20093,
                      "src": "5056:17:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 20098,
                              "name": "system",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 19681,
                              "src": "5076:6:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_System_$19679_storage",
                                "typeString": "struct DummyDGXStorage.System storage ref"
                              }
                            },
                            "id": 20099,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "users",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 19678,
                            "src": "5076:12:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_struct$_User_$19668_storage_$",
                              "typeString": "mapping(address => struct DummyDGXStorage.User storage ref)"
                            }
                          },
                          "id": 20101,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 20100,
                            "name": "_account",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20090,
                            "src": "5089:8:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "5076:22:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_User_$19668_storage",
                            "typeString": "struct DummyDGXStorage.User storage ref"
                          }
                        },
                        "id": 20102,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "config",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 19665,
                        "src": "5076:29:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_UserConfig_$19654_storage",
                          "typeString": "struct DummyDGXStorage.UserConfig storage ref"
                        }
                      },
                      "id": 20103,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "no_demurrage_fee",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 19651,
                      "src": "5076:46:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "5056:66:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 20105,
                  "nodeType": "ExpressionStatement",
                  "src": "5056:66:70"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 20113,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 20106,
                      "name": "_no_transfer_fee",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20095,
                      "src": "5128:16:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 20107,
                              "name": "system",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 19681,
                              "src": "5147:6:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_System_$19679_storage",
                                "typeString": "struct DummyDGXStorage.System storage ref"
                              }
                            },
                            "id": 20108,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "users",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 19678,
                            "src": "5147:12:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_struct$_User_$19668_storage_$",
                              "typeString": "mapping(address => struct DummyDGXStorage.User storage ref)"
                            }
                          },
                          "id": 20110,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 20109,
                            "name": "_account",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20090,
                            "src": "5160:8:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "5147:22:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_User_$19668_storage",
                            "typeString": "struct DummyDGXStorage.User storage ref"
                          }
                        },
                        "id": 20111,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "config",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 19665,
                        "src": "5147:29:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_UserConfig_$19654_storage",
                          "typeString": "struct DummyDGXStorage.UserConfig storage ref"
                        }
                      },
                      "id": 20112,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "no_transfer_fee",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 19653,
                      "src": "5147:45:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "5128:64:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 20114,
                  "nodeType": "ExpressionStatement",
                  "src": "5128:64:70"
                }
              ]
            },
            "documentation": null,
            "id": 20116,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "read_user_fees_configs",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 20091,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20090,
                  "name": "_account",
                  "nodeType": "VariableDeclaration",
                  "scope": 20116,
                  "src": "4928:16:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 20089,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4928:7:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4927:18:70"
            },
            "payable": false,
            "returnParameters": {
              "id": 20096,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20093,
                  "name": "_no_demurrage_fee",
                  "nodeType": "VariableDeclaration",
                  "scope": 20116,
                  "src": "4990:22:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 20092,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "4990:4:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 20095,
                  "name": "_no_transfer_fee",
                  "nodeType": "VariableDeclaration",
                  "scope": 20116,
                  "src": "5020:21:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 20094,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "5020:4:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4982:65:70"
            },
            "scope": 21192,
            "src": "4896:301:70",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 20146,
              "nodeType": "Block",
              "src": "5419:186:70",
              "statements": [
                {
                  "assignments": [
                    20128
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 20128,
                      "name": "_demurrage",
                      "nodeType": "VariableDeclaration",
                      "scope": 20147,
                      "src": "5425:44:70",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Demurrage_$21240_memory_ptr",
                        "typeString": "struct DemurrageStructs.Demurrage"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 20127,
                        "name": "DemurrageStructs.Demurrage",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 21240,
                        "src": "5425:26:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Demurrage_$21240_storage_ptr",
                          "typeString": "struct DemurrageStructs.Demurrage"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 20132,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 20130,
                        "name": "_user",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20118,
                        "src": "5492:5:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 20129,
                      "name": "get_demurraged_data",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20605,
                      "src": "5472:19:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_struct$_Demurrage_$21240_memory_ptr_$",
                        "typeString": "function (address) view returns (struct DemurrageStructs.Demurrage memory)"
                      }
                    },
                    "id": 20131,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5472:26:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Demurrage_$21240_memory_ptr",
                      "typeString": "struct DemurrageStructs.Demurrage memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5425:73:70"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 20137,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 20133,
                      "name": "_demurrage",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20128,
                      "src": "5504:10:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Demurrage_$21240_memory_ptr",
                        "typeString": "struct DemurrageStructs.Demurrage memory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 20135,
                          "name": "_demurrage",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 20128,
                          "src": "5537:10:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Demurrage_$21240_memory_ptr",
                            "typeString": "struct DemurrageStructs.Demurrage memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_struct$_Demurrage_$21240_memory_ptr",
                            "typeString": "struct DemurrageStructs.Demurrage memory"
                          }
                        ],
                        "id": 20134,
                        "name": "calculate_demurrage",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20791,
                        "src": "5517:19:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_struct$_Demurrage_$21240_memory_ptr_$returns$_t_struct$_Demurrage_$21240_memory_ptr_$",
                          "typeString": "function (struct DemurrageStructs.Demurrage memory) view returns (struct DemurrageStructs.Demurrage memory)"
                        }
                      },
                      "id": 20136,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "5517:31:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Demurrage_$21240_memory_ptr",
                        "typeString": "struct DemurrageStructs.Demurrage memory"
                      }
                    },
                    "src": "5504:44:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Demurrage_$21240_memory_ptr",
                      "typeString": "struct DemurrageStructs.Demurrage memory"
                    }
                  },
                  "id": 20138,
                  "nodeType": "ExpressionStatement",
                  "src": "5504:44:70"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 20144,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 20139,
                      "name": "_actual_balance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20123,
                      "src": "5554:15:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 20140,
                            "name": "_demurrage",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20128,
                            "src": "5572:10:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Demurrage_$21240_memory_ptr",
                              "typeString": "struct DemurrageStructs.Demurrage memory"
                            }
                          },
                          "id": 20141,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "user",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 21237,
                          "src": "5572:15:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_User_$21224_memory",
                            "typeString": "struct DemurrageStructs.User memory"
                          }
                        },
                        "id": 20142,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "balance",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 21221,
                        "src": "5572:23:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                          "typeString": "struct Types.MutableUint memory"
                        }
                      },
                      "id": 20143,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "post",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 25203,
                      "src": "5572:28:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "5554:46:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 20145,
                  "nodeType": "ExpressionStatement",
                  "src": "5554:46:70"
                }
              ]
            },
            "documentation": "/////////////////////// CALLABLE FROM INTERACTIVE ////////////////////////",
            "id": 20147,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [
              {
                "arguments": [],
                "id": 20121,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 20120,
                  "name": "if_dgx_interactive",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 19821,
                  "src": "5345:18:70",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "5345:20:70"
              }
            ],
            "name": "show_demurraged_balance",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 20119,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20118,
                  "name": "_user",
                  "nodeType": "VariableDeclaration",
                  "scope": 20147,
                  "src": "5315:13:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 20117,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5315:7:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5314:15:70"
            },
            "payable": false,
            "returnParameters": {
              "id": 20124,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20123,
                  "name": "_actual_balance",
                  "nodeType": "VariableDeclaration",
                  "scope": 20147,
                  "src": "5392:23:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 20122,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5392:7:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5391:25:70"
            },
            "scope": 21192,
            "src": "5282:323:70",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 20386,
              "nodeType": "Block",
              "src": "5814:2073:70",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 20167,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 20165,
                          "name": "_sender",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 20149,
                          "src": "5828:7:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 20166,
                          "name": "_recipient",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 20151,
                          "src": "5839:10:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "5828:21:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 20164,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        26185,
                        26186
                      ],
                      "referencedDeclaration": 26185,
                      "src": "5820:7:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 20168,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5820:30:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 20169,
                  "nodeType": "ExpressionStatement",
                  "src": "5820:30:70"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 20175,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 20172,
                              "name": "_sender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 20149,
                              "src": "5881:7:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 20171,
                            "name": "deduct_demurrage",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20836,
                            "src": "5864:16:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$_t_bool_$",
                              "typeString": "function (address) returns (bool)"
                            }
                          },
                          "id": 20173,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5864:25:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "74727565",
                          "id": 20174,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "5893:4:70",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        },
                        "src": "5864:33:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 20170,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        26185,
                        26186
                      ],
                      "referencedDeclaration": 26185,
                      "src": "5856:7:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 20176,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5856:42:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 20177,
                  "nodeType": "ExpressionStatement",
                  "src": "5856:42:70"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 20183,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 20180,
                              "name": "_recipient",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 20151,
                              "src": "5929:10:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 20179,
                            "name": "deduct_demurrage",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20836,
                            "src": "5912:16:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$_t_bool_$",
                              "typeString": "function (address) returns (bool)"
                            }
                          },
                          "id": 20181,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5912:28:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "74727565",
                          "id": 20182,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "5944:4:70",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        },
                        "src": "5912:36:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 20178,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        26185,
                        26186
                      ],
                      "referencedDeclaration": 26185,
                      "src": "5904:7:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 20184,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5904:45:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 20185,
                  "nodeType": "ExpressionStatement",
                  "src": "5904:45:70"
                },
                {
                  "assignments": [],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 20189,
                      "name": "_transfer",
                      "nodeType": "VariableDeclaration",
                      "scope": 20387,
                      "src": "5956:41:70",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                        "typeString": "struct TransferStructs.Transfer"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 20188,
                        "name": "TransferStructs.Transfer",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 21292,
                        "src": "5956:24:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Transfer_$21292_storage_ptr",
                          "typeString": "struct TransferStructs.Transfer"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 20190,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5956:41:70"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 20216,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 20191,
                                "name": "_transfer",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 20189,
                                "src": "6011:9:70",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                                  "typeString": "struct TransferStructs.Transfer memory"
                                }
                              },
                              "id": 20195,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "config",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 21283,
                              "src": "6011:16:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Config_$21275_memory",
                                "typeString": "struct TransferStructs.Config memory"
                              }
                            },
                            "id": 20196,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "collector_balance",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 21264,
                            "src": "6011:34:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                              "typeString": "struct Types.MutableUint memory"
                            }
                          },
                          "id": 20197,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "memberName": "pre",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 25201,
                          "src": "6011:38:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 20198,
                              "name": "_transfer",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 20189,
                              "src": "6057:9:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                                "typeString": "struct TransferStructs.Transfer memory"
                              }
                            },
                            "id": 20199,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "config",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 21283,
                            "src": "6057:16:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Config_$21275_memory",
                              "typeString": "struct TransferStructs.Config memory"
                            }
                          },
                          "id": 20200,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "memberName": "base",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 21268,
                          "src": "6057:21:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 20201,
                              "name": "_transfer",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 20189,
                              "src": "6086:9:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                                "typeString": "struct TransferStructs.Transfer memory"
                              }
                            },
                            "id": 20202,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "config",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 21283,
                            "src": "6086:16:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Config_$21275_memory",
                              "typeString": "struct TransferStructs.Config memory"
                            }
                          },
                          "id": 20203,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "memberName": "rate",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 21270,
                          "src": "6086:21:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 20204,
                              "name": "_transfer",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 20189,
                              "src": "6115:9:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                                "typeString": "struct TransferStructs.Transfer memory"
                              }
                            },
                            "id": 20205,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "config",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 21283,
                            "src": "6115:16:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Config_$21275_memory",
                              "typeString": "struct TransferStructs.Config memory"
                            }
                          },
                          "id": 20206,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "memberName": "collector",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 21266,
                          "src": "6115:26:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 20207,
                              "name": "_transfer",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 20189,
                              "src": "6149:9:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                                "typeString": "struct TransferStructs.Transfer memory"
                              }
                            },
                            "id": 20208,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "config",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 21283,
                            "src": "6149:16:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Config_$21275_memory",
                              "typeString": "struct TransferStructs.Config memory"
                            }
                          },
                          "id": 20209,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "memberName": "global_transfer_fee_disabled",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 21272,
                          "src": "6149:45:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 20210,
                              "name": "_transfer",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 20189,
                              "src": "6202:9:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                                "typeString": "struct TransferStructs.Transfer memory"
                              }
                            },
                            "id": 20211,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "config",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 21283,
                            "src": "6202:16:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Config_$21275_memory",
                              "typeString": "struct TransferStructs.Config memory"
                            }
                          },
                          "id": 20212,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "memberName": "minimum_transfer_amount",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 21274,
                          "src": "6202:40:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "id": 20213,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "TupleExpression",
                      "src": "6003:245:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_address_$_t_bool_$_t_uint256_$",
                        "typeString": "tuple(uint256,uint256,uint256,address,bool,uint256)"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 20214,
                        "name": "read_transfer_config",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 19985,
                        "src": "6251:20:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$_t_uint256_$_t_uint256_$_t_address_$_t_bool_$_t_uint256_$",
                          "typeString": "function () view returns (uint256,uint256,uint256,address,bool,uint256)"
                        }
                      },
                      "id": 20215,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "6251:22:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_address_$_t_bool_$_t_uint256_$",
                        "typeString": "tuple(uint256,uint256,uint256,address,bool,uint256)"
                      }
                    },
                    "src": "6003:270:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 20217,
                  "nodeType": "ExpressionStatement",
                  "src": "6003:270:70"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 20223,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 20219,
                          "name": "_amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 20155,
                          "src": "6288:7:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 20220,
                              "name": "_transfer",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 20189,
                              "src": "6299:9:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                                "typeString": "struct TransferStructs.Transfer memory"
                              }
                            },
                            "id": 20221,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "config",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 21283,
                            "src": "6299:16:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Config_$21275_memory",
                              "typeString": "struct TransferStructs.Config memory"
                            }
                          },
                          "id": 20222,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "minimum_transfer_amount",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 21274,
                          "src": "6299:40:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "6288:51:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 20218,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        26185,
                        26186
                      ],
                      "referencedDeclaration": 26185,
                      "src": "6280:7:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 20224,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6280:60:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 20225,
                  "nodeType": "ExpressionStatement",
                  "src": "6280:60:70"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 20240,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 20226,
                                "name": "_transfer",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 20189,
                                "src": "6348:9:70",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                                  "typeString": "struct TransferStructs.Transfer memory"
                                }
                              },
                              "id": 20230,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 21277,
                              "src": "6348:16:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_User_$21257_memory",
                                "typeString": "struct TransferStructs.User memory"
                              }
                            },
                            "id": 20231,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "balance",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 21254,
                            "src": "6348:24:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                              "typeString": "struct Types.MutableUint memory"
                            }
                          },
                          "id": 20232,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "memberName": "pre",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 25201,
                          "src": "6348:28:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 20233,
                              "name": "_transfer",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 20189,
                              "src": "6378:9:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                                "typeString": "struct TransferStructs.Transfer memory"
                              }
                            },
                            "id": 20234,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 21277,
                            "src": "6378:16:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_User_$21257_memory",
                              "typeString": "struct TransferStructs.User memory"
                            }
                          },
                          "id": 20235,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "memberName": "no_transfer_fee",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 21256,
                          "src": "6378:32:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        }
                      ],
                      "id": 20236,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "TupleExpression",
                      "src": "6347:64:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_uint256_$_t_bool_$",
                        "typeString": "tuple(uint256,bool)"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 20238,
                          "name": "_sender",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 20149,
                          "src": "6443:7:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 20237,
                        "name": "read_user_for_transfer",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20013,
                        "src": "6420:22:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$_t_bool_$",
                          "typeString": "function (address) view returns (uint256,bool)"
                        }
                      },
                      "id": 20239,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "6420:31:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_uint256_$_t_bool_$",
                        "typeString": "tuple(uint256,bool)"
                      }
                    },
                    "src": "6347:104:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 20241,
                  "nodeType": "ExpressionStatement",
                  "src": "6347:104:70"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 20256,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 20242,
                                "name": "_transfer",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 20189,
                                "src": "6459:9:70",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                                  "typeString": "struct TransferStructs.Transfer memory"
                                }
                              },
                              "id": 20246,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "recipient",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 21279,
                              "src": "6459:19:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_User_$21257_memory",
                                "typeString": "struct TransferStructs.User memory"
                              }
                            },
                            "id": 20247,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "balance",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 21254,
                            "src": "6459:27:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                              "typeString": "struct Types.MutableUint memory"
                            }
                          },
                          "id": 20248,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "memberName": "pre",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 25201,
                          "src": "6459:31:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 20249,
                              "name": "_transfer",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 20189,
                              "src": "6492:9:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                                "typeString": "struct TransferStructs.Transfer memory"
                              }
                            },
                            "id": 20250,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "recipient",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 21279,
                            "src": "6492:19:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_User_$21257_memory",
                              "typeString": "struct TransferStructs.User memory"
                            }
                          },
                          "id": 20251,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "memberName": "no_transfer_fee",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 21256,
                          "src": "6492:35:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        }
                      ],
                      "id": 20252,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "TupleExpression",
                      "src": "6458:70:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_uint256_$_t_bool_$",
                        "typeString": "tuple(uint256,bool)"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 20254,
                          "name": "_recipient",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 20151,
                          "src": "6560:10:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 20253,
                        "name": "read_user_for_transfer",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20013,
                        "src": "6537:22:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$_t_bool_$",
                          "typeString": "function (address) view returns (uint256,bool)"
                        }
                      },
                      "id": 20255,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "6537:34:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_uint256_$_t_bool_$",
                        "typeString": "tuple(uint256,bool)"
                      }
                    },
                    "src": "6458:113:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 20257,
                  "nodeType": "ExpressionStatement",
                  "src": "6458:113:70"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 20262,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 20258,
                        "name": "_transfer",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20189,
                        "src": "6578:9:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                          "typeString": "struct TransferStructs.Transfer memory"
                        }
                      },
                      "id": 20260,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "sent_amount",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 21287,
                      "src": "6578:21:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 20261,
                      "name": "_amount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20155,
                      "src": "6602:7:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "6578:31:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 20263,
                  "nodeType": "ExpressionStatement",
                  "src": "6578:31:70"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 20268,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 20264,
                        "name": "_transfer",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20189,
                        "src": "6615:9:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                          "typeString": "struct TransferStructs.Transfer memory"
                        }
                      },
                      "id": 20266,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "is_transfer_from",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 21291,
                      "src": "6615:26:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 20267,
                      "name": "_transfer_from",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20157,
                      "src": "6644:14:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "6615:43:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 20269,
                  "nodeType": "ExpressionStatement",
                  "src": "6615:43:70"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 20282,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 20274,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 20270,
                                "name": "_transfer",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 20189,
                                "src": "6670:9:70",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                                  "typeString": "struct TransferStructs.Transfer memory"
                                }
                              },
                              "id": 20271,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "config",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 21283,
                              "src": "6670:16:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Config_$21275_memory",
                                "typeString": "struct TransferStructs.Config memory"
                              }
                            },
                            "id": 20272,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "global_transfer_fee_disabled",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 21272,
                            "src": "6670:45:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "74727565",
                            "id": 20273,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "bool",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "6719:4:70",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "value": "true"
                          },
                          "src": "6670:53:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        }
                      ],
                      "id": 20275,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "6669:55:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "||",
                    "rightExpression": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 20280,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 20276,
                                "name": "_transfer",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 20189,
                                "src": "6739:9:70",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                                  "typeString": "struct TransferStructs.Transfer memory"
                                }
                              },
                              "id": 20277,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 21277,
                              "src": "6739:16:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_User_$21257_memory",
                                "typeString": "struct TransferStructs.User memory"
                              }
                            },
                            "id": 20278,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "no_transfer_fee",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 21256,
                            "src": "6739:32:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "74727565",
                            "id": 20279,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "bool",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "6775:4:70",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "value": "true"
                          },
                          "src": "6739:40:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        }
                      ],
                      "id": 20281,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "6738:42:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "6669:111:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 20296,
                    "nodeType": "Block",
                    "src": "6861:70:70",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 20294,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 20290,
                            "name": "_transfer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20189,
                            "src": "6869:9:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                              "typeString": "struct TransferStructs.Transfer memory"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 20292,
                                "name": "_transfer",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 20189,
                                "src": "6914:9:70",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                                  "typeString": "struct TransferStructs.Transfer memory"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                                  "typeString": "struct TransferStructs.Transfer memory"
                                }
                              ],
                              "id": 20291,
                              "name": "build_transfer_with_transfer_fee",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 21043,
                              "src": "6881:32:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_struct$_Transfer_$21292_memory_ptr_$returns$_t_struct$_Transfer_$21292_memory_ptr_$",
                                "typeString": "function (struct TransferStructs.Transfer memory) pure returns (struct TransferStructs.Transfer memory)"
                              }
                            },
                            "id": 20293,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "6881:43:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                              "typeString": "struct TransferStructs.Transfer memory"
                            }
                          },
                          "src": "6869:55:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                            "typeString": "struct TransferStructs.Transfer memory"
                          }
                        },
                        "id": 20295,
                        "nodeType": "ExpressionStatement",
                        "src": "6869:55:70"
                      }
                    ]
                  },
                  "id": 20297,
                  "nodeType": "IfStatement",
                  "src": "6665:266:70",
                  "trueBody": {
                    "id": 20289,
                    "nodeType": "Block",
                    "src": "6782:73:70",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 20287,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 20283,
                            "name": "_transfer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20189,
                            "src": "6790:9:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                              "typeString": "struct TransferStructs.Transfer memory"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 20285,
                                "name": "_transfer",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 20189,
                                "src": "6838:9:70",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                                  "typeString": "struct TransferStructs.Transfer memory"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                                  "typeString": "struct TransferStructs.Transfer memory"
                                }
                              ],
                              "id": 20284,
                              "name": "build_transfer_with_no_transfer_fee",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 20952,
                              "src": "6802:35:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_struct$_Transfer_$21292_memory_ptr_$returns$_t_struct$_Transfer_$21292_memory_ptr_$",
                                "typeString": "function (struct TransferStructs.Transfer memory) pure returns (struct TransferStructs.Transfer memory)"
                              }
                            },
                            "id": 20286,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "6802:46:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                              "typeString": "struct TransferStructs.Transfer memory"
                            }
                          },
                          "src": "6790:58:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                            "typeString": "struct TransferStructs.Transfer memory"
                          }
                        },
                        "id": 20288,
                        "nodeType": "ExpressionStatement",
                        "src": "6790:58:70"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 20301,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 20298,
                        "name": "_transfer",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20189,
                        "src": "6941:9:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                          "typeString": "struct TransferStructs.Transfer memory"
                        }
                      },
                      "id": 20299,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "is_transfer_from",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 21291,
                      "src": "6941:26:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "74727565",
                      "id": 20300,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "6971:4:70",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "true"
                    },
                    "src": "6941:34:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 20380,
                    "nodeType": "Block",
                    "src": "7570:290:70",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 20378,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 20361,
                            "name": "_success",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20162,
                            "src": "7578:8:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 20363,
                                "name": "_sender",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 20149,
                                "src": "7633:7:70",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 20364,
                                      "name": "_transfer",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 20189,
                                      "src": "7661:9:70",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                                        "typeString": "struct TransferStructs.Transfer memory"
                                      }
                                    },
                                    "id": 20365,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "sender",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 21277,
                                    "src": "7661:16:70",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_User_$21257_memory",
                                      "typeString": "struct TransferStructs.User memory"
                                    }
                                  },
                                  "id": 20366,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "balance",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 21254,
                                  "src": "7661:24:70",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                                    "typeString": "struct Types.MutableUint memory"
                                  }
                                },
                                "id": 20367,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "post",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 25203,
                                "src": "7661:29:70",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 20368,
                                "name": "_recipient",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 20151,
                                "src": "7711:10:70",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 20369,
                                      "name": "_transfer",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 20189,
                                      "src": "7742:9:70",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                                        "typeString": "struct TransferStructs.Transfer memory"
                                      }
                                    },
                                    "id": 20370,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "recipient",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 21279,
                                    "src": "7742:19:70",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_User_$21257_memory",
                                      "typeString": "struct TransferStructs.User memory"
                                    }
                                  },
                                  "id": 20371,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "balance",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 21254,
                                  "src": "7742:27:70",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                                    "typeString": "struct Types.MutableUint memory"
                                  }
                                },
                                "id": 20372,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "post",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 25203,
                                "src": "7742:32:70",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 20373,
                                      "name": "_transfer",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 20189,
                                      "src": "7795:9:70",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                                        "typeString": "struct TransferStructs.Transfer memory"
                                      }
                                    },
                                    "id": 20374,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "config",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 21283,
                                    "src": "7795:16:70",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Config_$21275_memory",
                                      "typeString": "struct TransferStructs.Config memory"
                                    }
                                  },
                                  "id": 20375,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "collector_balance",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 21264,
                                  "src": "7795:34:70",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                                    "typeString": "struct Types.MutableUint memory"
                                  }
                                },
                                "id": 20376,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "post",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 25203,
                                "src": "7795:39:70",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 20362,
                              "name": "update_transfer_balance",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 21123,
                              "src": "7589:23:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_address_$_t_uint256_$_t_uint256_$returns$_t_bool_$",
                                "typeString": "function (address,uint256,address,uint256,uint256) returns (bool)"
                              }
                            },
                            "id": 20377,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "7589:264:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "7578:275:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 20379,
                        "nodeType": "ExpressionStatement",
                        "src": "7578:275:70"
                      }
                    ]
                  },
                  "id": 20381,
                  "nodeType": "IfStatement",
                  "src": "6937:923:70",
                  "trueBody": {
                    "id": 20360,
                    "nodeType": "Block",
                    "src": "6977:587:70",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "id": 20307,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 20304,
                                    "name": "_spender",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 20153,
                                    "src": "7010:8:70",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "id": 20303,
                                  "name": "deduct_demurrage",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 20836,
                                  "src": "6993:16:70",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$_t_bool_$",
                                    "typeString": "function (address) returns (bool)"
                                  }
                                },
                                "id": 20305,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "6993:26:70",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "argumentTypes": null,
                                "hexValue": "74727565",
                                "id": 20306,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "bool",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "7023:4:70",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                "value": "true"
                              },
                              "src": "6993:34:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 20302,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              26185,
                              26186
                            ],
                            "referencedDeclaration": 26185,
                            "src": "6985:7:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                              "typeString": "function (bool) pure"
                            }
                          },
                          "id": 20308,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6985:43:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 20309,
                        "nodeType": "ExpressionStatement",
                        "src": "6985:43:70"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 20321,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 20310,
                                  "name": "_transfer",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 20189,
                                  "src": "7036:9:70",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                                    "typeString": "struct TransferStructs.Transfer memory"
                                  }
                                },
                                "id": 20314,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "spender",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 21281,
                                "src": "7036:17:70",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Spender_$21262_memory",
                                  "typeString": "struct TransferStructs.Spender memory"
                                }
                              },
                              "id": 20315,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "allowance",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 21261,
                              "src": "7036:27:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                                "typeString": "struct Types.MutableUint memory"
                              }
                            },
                            "id": 20316,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "pre",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 25201,
                            "src": "7036:31:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 20318,
                                "name": "_sender",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 20149,
                                "src": "7085:7:70",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 20319,
                                "name": "_spender",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 20153,
                                "src": "7094:8:70",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 20317,
                              "name": "read_allowance",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 20088,
                              "src": "7070:14:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$returns$_t_uint256_$",
                                "typeString": "function (address,address) view returns (uint256)"
                              }
                            },
                            "id": 20320,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "7070:33:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "7036:67:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 20322,
                        "nodeType": "ExpressionStatement",
                        "src": "7036:67:70"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 20334,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 20323,
                                "name": "_transfer",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 20189,
                                "src": "7111:9:70",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                                  "typeString": "struct TransferStructs.Transfer memory"
                                }
                              },
                              "id": 20326,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "spender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 21281,
                              "src": "7111:17:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Spender_$21262_memory",
                                "typeString": "struct TransferStructs.Spender memory"
                              }
                            },
                            "id": 20327,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "allowance",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 21261,
                            "src": "7111:27:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                              "typeString": "struct Types.MutableUint memory"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 20332,
                                "name": "_amount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 20155,
                                "src": "7178:7:70",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 20328,
                                    "name": "_transfer",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 20189,
                                    "src": "7141:9:70",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                                      "typeString": "struct TransferStructs.Transfer memory"
                                    }
                                  },
                                  "id": 20329,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "spender",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 21281,
                                  "src": "7141:17:70",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Spender_$21262_memory",
                                    "typeString": "struct TransferStructs.Spender memory"
                                  }
                                },
                                "id": 20330,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "allowance",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 21261,
                                "src": "7141:27:70",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                                  "typeString": "struct Types.MutableUint memory"
                                }
                              },
                              "id": 20331,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "subtract",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 25482,
                              "src": "7141:36:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_struct$_MutableUint_$25204_memory_ptr_$_t_uint256_$returns$_t_struct$_MutableUint_$25204_memory_ptr_$bound_to$_t_struct$_MutableUint_$25204_memory_ptr_$",
                                "typeString": "function (struct Types.MutableUint memory,uint256) pure returns (struct Types.MutableUint memory)"
                              }
                            },
                            "id": 20333,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "7141:45:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_MutableUint_$25204_memory_ptr",
                              "typeString": "struct Types.MutableUint memory"
                            }
                          },
                          "src": "7111:75:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                            "typeString": "struct Types.MutableUint memory"
                          }
                        },
                        "id": 20335,
                        "nodeType": "ExpressionStatement",
                        "src": "7111:75:70"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 20358,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 20336,
                            "name": "_success",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20162,
                            "src": "7195:8:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 20338,
                                "name": "_sender",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 20149,
                                "src": "7255:7:70",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 20339,
                                      "name": "_transfer",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 20189,
                                      "src": "7283:9:70",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                                        "typeString": "struct TransferStructs.Transfer memory"
                                      }
                                    },
                                    "id": 20340,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "sender",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 21277,
                                    "src": "7283:16:70",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_User_$21257_memory",
                                      "typeString": "struct TransferStructs.User memory"
                                    }
                                  },
                                  "id": 20341,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "balance",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 21254,
                                  "src": "7283:24:70",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                                    "typeString": "struct Types.MutableUint memory"
                                  }
                                },
                                "id": 20342,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "post",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 25203,
                                "src": "7283:29:70",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 20343,
                                "name": "_recipient",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 20151,
                                "src": "7333:10:70",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 20344,
                                      "name": "_transfer",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 20189,
                                      "src": "7364:9:70",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                                        "typeString": "struct TransferStructs.Transfer memory"
                                      }
                                    },
                                    "id": 20345,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "recipient",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 21279,
                                    "src": "7364:19:70",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_User_$21257_memory",
                                      "typeString": "struct TransferStructs.User memory"
                                    }
                                  },
                                  "id": 20346,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "balance",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 21254,
                                  "src": "7364:27:70",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                                    "typeString": "struct Types.MutableUint memory"
                                  }
                                },
                                "id": 20347,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "post",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 25203,
                                "src": "7364:32:70",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 20348,
                                      "name": "_transfer",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 20189,
                                      "src": "7417:9:70",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                                        "typeString": "struct TransferStructs.Transfer memory"
                                      }
                                    },
                                    "id": 20349,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "config",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 21283,
                                    "src": "7417:16:70",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Config_$21275_memory",
                                      "typeString": "struct TransferStructs.Config memory"
                                    }
                                  },
                                  "id": 20350,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "collector_balance",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 21264,
                                  "src": "7417:34:70",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                                    "typeString": "struct Types.MutableUint memory"
                                  }
                                },
                                "id": 20351,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "post",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 25203,
                                "src": "7417:39:70",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 20352,
                                "name": "_spender",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 20153,
                                "src": "7477:8:70",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 20353,
                                      "name": "_transfer",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 20189,
                                      "src": "7506:9:70",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                                        "typeString": "struct TransferStructs.Transfer memory"
                                      }
                                    },
                                    "id": 20354,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "spender",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 21281,
                                    "src": "7506:17:70",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Spender_$21262_memory",
                                      "typeString": "struct TransferStructs.Spender memory"
                                    }
                                  },
                                  "id": 20355,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "allowance",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 21261,
                                  "src": "7506:27:70",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                                    "typeString": "struct Types.MutableUint memory"
                                  }
                                },
                                "id": 20356,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "post",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 25203,
                                "src": "7506:32:70",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 20337,
                              "name": "update_transfer_from_balance",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 21191,
                              "src": "7206:28:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_address_$_t_uint256_$_t_uint256_$_t_address_$_t_uint256_$returns$_t_bool_$",
                                "typeString": "function (address,uint256,address,uint256,uint256,address,uint256) returns (bool)"
                              }
                            },
                            "id": 20357,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "7206:351:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "7195:362:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 20359,
                        "nodeType": "ExpressionStatement",
                        "src": "7195:362:70"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 20383,
                        "name": "_success",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20162,
                        "src": "7873:8:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 20382,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        26185,
                        26186
                      ],
                      "referencedDeclaration": 26185,
                      "src": "7865:7:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 20384,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7865:17:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 20385,
                  "nodeType": "ExpressionStatement",
                  "src": "7865:17:70"
                }
              ]
            },
            "documentation": null,
            "id": 20387,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [],
                "id": 20160,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 20159,
                  "name": "if_dgx_interactive",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 19821,
                  "src": "5763:18:70",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "5763:20:70"
              }
            ],
            "name": "put_transfer",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 20158,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20149,
                  "name": "_sender",
                  "nodeType": "VariableDeclaration",
                  "scope": 20387,
                  "src": "5636:15:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 20148,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5636:7:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 20151,
                  "name": "_recipient",
                  "nodeType": "VariableDeclaration",
                  "scope": 20387,
                  "src": "5657:18:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 20150,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5657:7:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 20153,
                  "name": "_spender",
                  "nodeType": "VariableDeclaration",
                  "scope": 20387,
                  "src": "5681:16:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 20152,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5681:7:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 20155,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 20387,
                  "src": "5703:15:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 20154,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5703:7:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 20157,
                  "name": "_transfer_from",
                  "nodeType": "VariableDeclaration",
                  "scope": 20387,
                  "src": "5724:19:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 20156,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "5724:4:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5630:117:70"
            },
            "payable": false,
            "returnParameters": {
              "id": 20163,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20162,
                  "name": "_success",
                  "nodeType": "VariableDeclaration",
                  "scope": 20387,
                  "src": "5797:13:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 20161,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "5797:4:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5796:15:70"
            },
            "scope": 21192,
            "src": "5609:2278:70",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 20445,
              "nodeType": "Block",
              "src": "8047:270:70",
              "statements": [
                {
                  "assignments": [],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 20403,
                      "name": "_a",
                      "nodeType": "VariableDeclaration",
                      "scope": 20446,
                      "src": "8053:27:70",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_MutableUint_$25204_memory_ptr",
                        "typeString": "struct Types.MutableUint"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 20402,
                        "name": "Types.MutableUint",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 25204,
                        "src": "8053:17:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_MutableUint_$25204_storage_ptr",
                          "typeString": "struct Types.MutableUint"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 20404,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "8053:27:70"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 20412,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 20405,
                        "name": "_a",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20403,
                        "src": "8087:2:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_MutableUint_$25204_memory_ptr",
                          "typeString": "struct Types.MutableUint memory"
                        }
                      },
                      "id": 20407,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "pre",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 25201,
                      "src": "8087:6:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 20409,
                          "name": "_account",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 20389,
                          "src": "8111:8:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 20410,
                          "name": "_spender",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 20391,
                          "src": "8121:8:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 20408,
                        "name": "read_allowance",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20088,
                        "src": "8096:14:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$returns$_t_uint256_$",
                          "typeString": "function (address,address) view returns (uint256)"
                        }
                      },
                      "id": 20411,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "8096:34:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "8087:43:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 20413,
                  "nodeType": "ExpressionStatement",
                  "src": "8087:43:70"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 20423,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 20417,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 20414,
                              "name": "_a",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 20403,
                              "src": "8142:2:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_MutableUint_$25204_memory_ptr",
                                "typeString": "struct Types.MutableUint memory"
                              }
                            },
                            "id": 20415,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "pre",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 25201,
                            "src": "8142:6:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 20416,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "8151:1:70",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "8142:10:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        }
                      ],
                      "id": 20418,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "8141:12:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 20421,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 20419,
                            "name": "_amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20393,
                            "src": "8158:7:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 20420,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "8168:1:70",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "8158:11:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        }
                      ],
                      "id": 20422,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "8157:13:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "8141:29:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 20443,
                    "nodeType": "Block",
                    "src": "8201:112:70",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 20432,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 20428,
                              "name": "_a",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 20403,
                              "src": "8209:2:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_MutableUint_$25204_memory_ptr",
                                "typeString": "struct Types.MutableUint memory"
                              }
                            },
                            "id": 20430,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "post",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 25203,
                            "src": "8209:7:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 20431,
                            "name": "_amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20393,
                            "src": "8219:7:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "8209:17:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 20433,
                        "nodeType": "ExpressionStatement",
                        "src": "8209:17:70"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 20441,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 20434,
                            "name": "_success",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20398,
                            "src": "8234:8:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 20436,
                                "name": "_account",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 20389,
                                "src": "8278:8:70",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 20437,
                                "name": "_spender",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 20391,
                                "src": "8288:8:70",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 20438,
                                  "name": "_a",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 20403,
                                  "src": "8298:2:70",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_MutableUint_$25204_memory_ptr",
                                    "typeString": "struct Types.MutableUint memory"
                                  }
                                },
                                "id": 20439,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "post",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 25203,
                                "src": "8298:7:70",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 20435,
                              "name": "update_account_spender_allowance",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 21071,
                              "src": "8245:32:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$",
                                "typeString": "function (address,address,uint256) returns (bool)"
                              }
                            },
                            "id": 20440,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "8245:61:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "8234:72:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 20442,
                        "nodeType": "ExpressionStatement",
                        "src": "8234:72:70"
                      }
                    ]
                  },
                  "id": 20444,
                  "nodeType": "IfStatement",
                  "src": "8137:176:70",
                  "trueBody": {
                    "id": 20427,
                    "nodeType": "Block",
                    "src": "8172:23:70",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 20424,
                            "name": "revert",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              26187,
                              26188
                            ],
                            "referencedDeclaration": 26187,
                            "src": "8180:6:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_revert_pure$__$returns$__$",
                              "typeString": "function () pure"
                            }
                          },
                          "id": 20425,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8180:8:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 20426,
                        "nodeType": "ExpressionStatement",
                        "src": "8180:8:70"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": null,
            "id": 20446,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [],
                "id": 20396,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 20395,
                  "name": "if_dgx_interactive",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 19821,
                  "src": "7996:18:70",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "7996:20:70"
              }
            ],
            "name": "put_approve",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 20394,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20389,
                  "name": "_account",
                  "nodeType": "VariableDeclaration",
                  "scope": 20446,
                  "src": "7917:16:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 20388,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7917:7:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 20391,
                  "name": "_spender",
                  "nodeType": "VariableDeclaration",
                  "scope": 20446,
                  "src": "7939:16:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 20390,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7939:7:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 20393,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 20446,
                  "src": "7961:15:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 20392,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7961:7:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7911:69:70"
            },
            "payable": false,
            "returnParameters": {
              "id": 20399,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20398,
                  "name": "_success",
                  "nodeType": "VariableDeclaration",
                  "scope": 20446,
                  "src": "8030:13:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 20397,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "8030:4:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8029:15:70"
            },
            "scope": 21192,
            "src": "7891:426:70",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 20483,
              "nodeType": "Block",
              "src": "8499:162:70",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 20467,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 20459,
                              "name": "system",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 19681,
                              "src": "8505:6:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_System_$19679_storage",
                                "typeString": "struct DummyDGXStorage.System storage ref"
                              }
                            },
                            "id": 20462,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "users",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 19678,
                            "src": "8505:12:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_struct$_User_$19668_storage_$",
                              "typeString": "mapping(address => struct DummyDGXStorage.User storage ref)"
                            }
                          },
                          "id": 20463,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 20461,
                            "name": "_user",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20448,
                            "src": "8518:5:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "8505:19:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_User_$19668_storage",
                            "typeString": "struct DummyDGXStorage.User storage ref"
                          }
                        },
                        "id": 20464,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "config",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 19665,
                        "src": "8505:26:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_UserConfig_$19654_storage",
                          "typeString": "struct DummyDGXStorage.UserConfig storage ref"
                        }
                      },
                      "id": 20465,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "no_demurrage_fee",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 19651,
                      "src": "8505:43:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 20466,
                      "name": "_no_demurrage_fee",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20450,
                      "src": "8551:17:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "8505:63:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 20468,
                  "nodeType": "ExpressionStatement",
                  "src": "8505:63:70"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 20477,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 20469,
                              "name": "system",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 19681,
                              "src": "8574:6:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_System_$19679_storage",
                                "typeString": "struct DummyDGXStorage.System storage ref"
                              }
                            },
                            "id": 20472,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "users",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 19678,
                            "src": "8574:12:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_struct$_User_$19668_storage_$",
                              "typeString": "mapping(address => struct DummyDGXStorage.User storage ref)"
                            }
                          },
                          "id": 20473,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 20471,
                            "name": "_user",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20448,
                            "src": "8587:5:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "8574:19:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_User_$19668_storage",
                            "typeString": "struct DummyDGXStorage.User storage ref"
                          }
                        },
                        "id": 20474,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "config",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 19665,
                        "src": "8574:26:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_UserConfig_$19654_storage",
                          "typeString": "struct DummyDGXStorage.UserConfig storage ref"
                        }
                      },
                      "id": 20475,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "no_transfer_fee",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 19653,
                      "src": "8574:42:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 20476,
                      "name": "_no_transfer_fee",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20452,
                      "src": "8619:16:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "8574:61:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 20478,
                  "nodeType": "ExpressionStatement",
                  "src": "8574:61:70"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 20481,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 20479,
                      "name": "_success",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20457,
                      "src": "8641:8:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "74727565",
                      "id": 20480,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "8652:4:70",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "true"
                    },
                    "src": "8641:15:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 20482,
                  "nodeType": "ExpressionStatement",
                  "src": "8641:15:70"
                }
              ]
            },
            "documentation": null,
            "id": 20484,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [],
                "id": 20455,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 20454,
                  "name": "if_dgx_interactive",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 19821,
                  "src": "8448:18:70",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "8448:20:70"
              }
            ],
            "name": "update_user_fees_configs",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 20453,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20448,
                  "name": "_user",
                  "nodeType": "VariableDeclaration",
                  "scope": 20484,
                  "src": "8360:13:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 20447,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8360:7:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 20450,
                  "name": "_no_demurrage_fee",
                  "nodeType": "VariableDeclaration",
                  "scope": 20484,
                  "src": "8379:22:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 20449,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "8379:4:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 20452,
                  "name": "_no_transfer_fee",
                  "nodeType": "VariableDeclaration",
                  "scope": 20484,
                  "src": "8407:21:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 20451,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "8407:4:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8354:78:70"
            },
            "payable": false,
            "returnParameters": {
              "id": 20458,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20457,
                  "name": "_success",
                  "nodeType": "VariableDeclaration",
                  "scope": 20484,
                  "src": "8482:13:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 20456,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "8482:4:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8481:15:70"
            },
            "scope": 21192,
            "src": "8321:340:70",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 20515,
              "nodeType": "Block",
              "src": "8925:114:70",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 20503,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 20495,
                              "name": "system",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 19681,
                              "src": "8931:6:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_System_$19679_storage",
                                "typeString": "struct DummyDGXStorage.System storage ref"
                              }
                            },
                            "id": 20498,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "users",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 19678,
                            "src": "8931:12:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_struct$_User_$19668_storage_$",
                              "typeString": "mapping(address => struct DummyDGXStorage.User storage ref)"
                            }
                          },
                          "id": 20499,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 20497,
                            "name": "_for",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20486,
                            "src": "8944:4:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "8931:18:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_User_$19668_storage",
                            "typeString": "struct DummyDGXStorage.User storage ref"
                          }
                        },
                        "id": 20500,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "data",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 19667,
                        "src": "8931:23:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_UserData_$19663_storage",
                          "typeString": "struct DummyDGXStorage.UserData storage ref"
                        }
                      },
                      "id": 20501,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "raw_balance",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 19658,
                      "src": "8931:35:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "+=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 20502,
                      "name": "_amount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20488,
                      "src": "8970:7:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "8931:46:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 20504,
                  "nodeType": "ExpressionStatement",
                  "src": "8931:46:70"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 20509,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 20505,
                        "name": "system",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 19681,
                        "src": "8983:6:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_System_$19679_storage",
                          "typeString": "struct DummyDGXStorage.System storage ref"
                        }
                      },
                      "id": 20507,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "total_supply",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 19674,
                      "src": "8983:19:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "+=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 20508,
                      "name": "_amount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20488,
                      "src": "9006:7:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "8983:30:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 20510,
                  "nodeType": "ExpressionStatement",
                  "src": "8983:30:70"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 20513,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 20511,
                      "name": "_success",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20493,
                      "src": "9019:8:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "74727565",
                      "id": 20512,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "9030:4:70",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "true"
                    },
                    "src": "9019:15:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 20514,
                  "nodeType": "ExpressionStatement",
                  "src": "9019:15:70"
                }
              ]
            },
            "documentation": null,
            "id": 20516,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [],
                "id": 20491,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 20490,
                  "name": "if_dgx_interactive",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 19821,
                  "src": "8874:18:70",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "8874:20:70"
              }
            ],
            "name": "mint_dgx_for",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 20489,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20486,
                  "name": "_for",
                  "nodeType": "VariableDeclaration",
                  "scope": 20516,
                  "src": "8821:12:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 20485,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8821:7:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 20488,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 20516,
                  "src": "8839:15:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 20487,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8839:7:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8815:43:70"
            },
            "payable": false,
            "returnParameters": {
              "id": 20494,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20493,
                  "name": "_success",
                  "nodeType": "VariableDeclaration",
                  "scope": 20516,
                  "src": "8908:13:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 20492,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "8908:4:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8907:15:70"
            },
            "scope": 21192,
            "src": "8794:245:70",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 20546,
              "nodeType": "Block",
              "src": "9323:105:70",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 20540,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 20527,
                              "name": "system",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 19681,
                              "src": "9329:6:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_System_$19679_storage",
                                "typeString": "struct DummyDGXStorage.System storage ref"
                              }
                            },
                            "id": 20530,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "users",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 19678,
                            "src": "9329:12:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_struct$_User_$19668_storage_$",
                              "typeString": "mapping(address => struct DummyDGXStorage.User storage ref)"
                            }
                          },
                          "id": 20531,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 20529,
                            "name": "_of",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20518,
                            "src": "9342:3:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "9329:17:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_User_$19668_storage",
                            "typeString": "struct DummyDGXStorage.User storage ref"
                          }
                        },
                        "id": 20532,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "data",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 19667,
                        "src": "9329:22:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_UserData_$19663_storage",
                          "typeString": "struct DummyDGXStorage.UserData storage ref"
                        }
                      },
                      "id": 20533,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "last_payment_date",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 19656,
                      "src": "9329:40:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 20539,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 20534,
                        "name": "now",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 26184,
                        "src": "9372:3:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "-",
                      "rightExpression": {
                        "argumentTypes": null,
                        "components": [
                          {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 20537,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "id": 20535,
                              "name": "_byMinutes",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 20520,
                              "src": "9379:10:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "*",
                            "rightExpression": {
                              "argumentTypes": null,
                              "hexValue": "31",
                              "id": 20536,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "9392:9:70",
                              "subdenomination": "minutes",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_60_by_1",
                                "typeString": "int_const 60"
                              },
                              "value": "1"
                            },
                            "src": "9379:22:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "id": 20538,
                        "isConstant": false,
                        "isInlineArray": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "TupleExpression",
                        "src": "9378:24:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "9372:30:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "9329:73:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 20541,
                  "nodeType": "ExpressionStatement",
                  "src": "9329:73:70"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 20544,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 20542,
                      "name": "_success",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20525,
                      "src": "9408:8:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "74727565",
                      "id": 20543,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "9419:4:70",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "true"
                    },
                    "src": "9408:15:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 20545,
                  "nodeType": "ExpressionStatement",
                  "src": "9408:15:70"
                }
              ]
            },
            "documentation": null,
            "id": 20547,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [],
                "id": 20523,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 20522,
                  "name": "if_dgx_interactive",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 19821,
                  "src": "9272:18:70",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "9272:20:70"
              }
            ],
            "name": "modify_last_payment_date",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 20521,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20518,
                  "name": "_of",
                  "nodeType": "VariableDeclaration",
                  "scope": 20547,
                  "src": "9217:11:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 20517,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "9217:7:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 20520,
                  "name": "_byMinutes",
                  "nodeType": "VariableDeclaration",
                  "scope": 20547,
                  "src": "9234:18:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 20519,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9234:7:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9211:45:70"
            },
            "payable": false,
            "returnParameters": {
              "id": 20526,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20525,
                  "name": "_success",
                  "nodeType": "VariableDeclaration",
                  "scope": 20547,
                  "src": "9306:13:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 20524,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "9306:4:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9305:15:70"
            },
            "scope": 21192,
            "src": "9178:250:70",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 20604,
              "nodeType": "Block",
              "src": "9636:387:70",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 20573,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 20554,
                                "name": "_demurrage",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 20552,
                                "src": "9650:10:70",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Demurrage_$21240_memory_ptr",
                                  "typeString": "struct DemurrageStructs.Demurrage memory"
                                }
                              },
                              "id": 20558,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "config",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 21235,
                              "src": "9650:17:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Config_$21233_memory",
                                "typeString": "struct DemurrageStructs.Config memory"
                              }
                            },
                            "id": 20559,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "collector_balance",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 21226,
                            "src": "9650:35:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                              "typeString": "struct Types.MutableUint memory"
                            }
                          },
                          "id": 20560,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "memberName": "pre",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 25201,
                          "src": "9650:39:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 20561,
                              "name": "_demurrage",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 20552,
                              "src": "9697:10:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Demurrage_$21240_memory_ptr",
                                "typeString": "struct DemurrageStructs.Demurrage memory"
                              }
                            },
                            "id": 20562,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "config",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 21235,
                            "src": "9697:17:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Config_$21233_memory",
                              "typeString": "struct DemurrageStructs.Config memory"
                            }
                          },
                          "id": 20563,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "memberName": "base",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 21228,
                          "src": "9697:22:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 20564,
                              "name": "_demurrage",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 20552,
                              "src": "9727:10:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Demurrage_$21240_memory_ptr",
                                "typeString": "struct DemurrageStructs.Demurrage memory"
                              }
                            },
                            "id": 20565,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "config",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 21235,
                            "src": "9727:17:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Config_$21233_memory",
                              "typeString": "struct DemurrageStructs.Config memory"
                            }
                          },
                          "id": 20566,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "memberName": "rate",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 21230,
                          "src": "9727:22:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 20567,
                              "name": "_demurrage",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 20552,
                              "src": "9757:10:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Demurrage_$21240_memory_ptr",
                                "typeString": "struct DemurrageStructs.Demurrage memory"
                              }
                            },
                            "id": 20568,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "config",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 21235,
                            "src": "9757:17:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Config_$21233_memory",
                              "typeString": "struct DemurrageStructs.Config memory"
                            }
                          },
                          "id": 20569,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "memberName": "collector",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 21232,
                          "src": "9757:27:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "id": 20570,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "TupleExpression",
                      "src": "9642:148:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_address_$",
                        "typeString": "tuple(uint256,uint256,uint256,address)"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 20571,
                        "name": "read_demurrage_config",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 19884,
                        "src": "9793:21:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$_t_uint256_$_t_uint256_$_t_address_$",
                          "typeString": "function () view returns (uint256,uint256,uint256,address)"
                        }
                      },
                      "id": 20572,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "9793:23:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_address_$",
                        "typeString": "tuple(uint256,uint256,uint256,address)"
                      }
                    },
                    "src": "9642:174:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 20574,
                  "nodeType": "ExpressionStatement",
                  "src": "9642:174:70"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 20581,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 20575,
                          "name": "_demurrage",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 20552,
                          "src": "9822:10:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Demurrage_$21240_memory_ptr",
                            "typeString": "struct DemurrageStructs.Demurrage memory"
                          }
                        },
                        "id": 20578,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "user",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 21237,
                        "src": "9822:15:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_User_$21224_memory",
                          "typeString": "struct DemurrageStructs.User memory"
                        }
                      },
                      "id": 20579,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "account",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 21217,
                      "src": "9822:23:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 20580,
                      "name": "_user",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20549,
                      "src": "9848:5:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "9822:31:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 20582,
                  "nodeType": "ExpressionStatement",
                  "src": "9822:31:70"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 20602,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 20583,
                                "name": "_demurrage",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 20552,
                                "src": "9867:10:70",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Demurrage_$21240_memory_ptr",
                                  "typeString": "struct DemurrageStructs.Demurrage memory"
                                }
                              },
                              "id": 20587,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "user",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 21237,
                              "src": "9867:15:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_User_$21224_memory",
                                "typeString": "struct DemurrageStructs.User memory"
                              }
                            },
                            "id": 20588,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "balance",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 21221,
                            "src": "9867:23:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                              "typeString": "struct Types.MutableUint memory"
                            }
                          },
                          "id": 20589,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "memberName": "pre",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 25201,
                          "src": "9867:27:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 20590,
                                  "name": "_demurrage",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 20552,
                                  "src": "9902:10:70",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Demurrage_$21240_memory_ptr",
                                    "typeString": "struct DemurrageStructs.Demurrage memory"
                                  }
                                },
                                "id": 20591,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "user",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 21237,
                                "src": "9902:15:70",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_User_$21224_memory",
                                  "typeString": "struct DemurrageStructs.User memory"
                                }
                              },
                              "id": 20592,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "payment_date",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 21223,
                              "src": "9902:28:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_MutableTimestamp_$25209_memory",
                                "typeString": "struct Types.MutableTimestamp memory"
                              }
                            },
                            "id": 20593,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "time",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 25206,
                            "src": "9902:33:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                              "typeString": "struct Types.MutableUint memory"
                            }
                          },
                          "id": 20594,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "memberName": "pre",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 25201,
                          "src": "9902:37:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 20595,
                              "name": "_demurrage",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 20552,
                              "src": "9947:10:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Demurrage_$21240_memory_ptr",
                                "typeString": "struct DemurrageStructs.Demurrage memory"
                              }
                            },
                            "id": 20596,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "user",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 21237,
                            "src": "9947:15:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_User_$21224_memory",
                              "typeString": "struct DemurrageStructs.User memory"
                            }
                          },
                          "id": 20597,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "memberName": "no_demurrage_fee",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 21219,
                          "src": "9947:32:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        }
                      ],
                      "id": 20598,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "TupleExpression",
                      "src": "9859:126:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_bool_$",
                        "typeString": "tuple(uint256,uint256,bool)"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 20600,
                          "name": "_user",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 20549,
                          "src": "10012:5:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 20599,
                        "name": "read_user_for_demurrage",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20056,
                        "src": "9988:23:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$_t_uint256_$_t_bool_$",
                          "typeString": "function (address) view returns (uint256,uint256,bool)"
                        }
                      },
                      "id": 20601,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "9988:30:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_bool_$",
                        "typeString": "tuple(uint256,uint256,bool)"
                      }
                    },
                    "src": "9859:159:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 20603,
                  "nodeType": "ExpressionStatement",
                  "src": "9859:159:70"
                }
              ]
            },
            "documentation": "///////////////////////// PRIVATE FUNCTIONS //////////////////////////////",
            "id": 20605,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "get_demurraged_data",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 20550,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20549,
                  "name": "_user",
                  "nodeType": "VariableDeclaration",
                  "scope": 20605,
                  "src": "9542:13:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 20548,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "9542:7:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9541:15:70"
            },
            "payable": false,
            "returnParameters": {
              "id": 20553,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20552,
                  "name": "_demurrage",
                  "nodeType": "VariableDeclaration",
                  "scope": 20605,
                  "src": "9595:37:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Demurrage_$21240_memory_ptr",
                    "typeString": "struct DemurrageStructs.Demurrage"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 20551,
                    "name": "DemurrageStructs.Demurrage",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21240,
                    "src": "9595:26:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Demurrage_$21240_storage_ptr",
                      "typeString": "struct DemurrageStructs.Demurrage"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9594:39:70"
            },
            "scope": 21192,
            "src": "9513:510:70",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "private"
          },
          {
            "body": {
              "id": 20790,
              "nodeType": "Block",
              "src": "10182:1230:70",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 20618,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 20612,
                              "name": "_demurrage",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 20607,
                              "src": "10192:10:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Demurrage_$21240_memory_ptr",
                                "typeString": "struct DemurrageStructs.Demurrage memory"
                              }
                            },
                            "id": 20613,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "user",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 21237,
                            "src": "10192:15:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_User_$21224_memory",
                              "typeString": "struct DemurrageStructs.User memory"
                            }
                          },
                          "id": 20614,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "payment_date",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 21223,
                          "src": "10192:28:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_MutableTimestamp_$25209_memory",
                            "typeString": "struct Types.MutableTimestamp memory"
                          }
                        },
                        "id": 20615,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "time",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 25206,
                        "src": "10192:33:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                          "typeString": "struct Types.MutableUint memory"
                        }
                      },
                      "id": 20616,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "pre",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 25201,
                      "src": "10192:37:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 20617,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "10233:1:70",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "10192:42:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 20632,
                  "nodeType": "IfStatement",
                  "src": "10188:106:70",
                  "trueBody": {
                    "id": 20631,
                    "nodeType": "Block",
                    "src": "10236:58:70",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 20629,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 20619,
                                    "name": "_demurrage",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 20607,
                                    "src": "10244:10:70",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Demurrage_$21240_memory_ptr",
                                      "typeString": "struct DemurrageStructs.Demurrage memory"
                                    }
                                  },
                                  "id": 20624,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "user",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 21237,
                                  "src": "10244:15:70",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_User_$21224_memory",
                                    "typeString": "struct DemurrageStructs.User memory"
                                  }
                                },
                                "id": 20625,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "payment_date",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 21223,
                                "src": "10244:28:70",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_MutableTimestamp_$25209_memory",
                                  "typeString": "struct Types.MutableTimestamp memory"
                                }
                              },
                              "id": 20626,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "time",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 25206,
                              "src": "10244:33:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                                "typeString": "struct Types.MutableUint memory"
                              }
                            },
                            "id": 20627,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "pre",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 25201,
                            "src": "10244:37:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 20628,
                            "name": "now",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 26184,
                            "src": "10284:3:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "10244:43:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 20630,
                        "nodeType": "ExpressionStatement",
                        "src": "10244:43:70"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 20645,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "id": 20637,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 20633,
                            "name": "_demurrage",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20607,
                            "src": "10362:10:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Demurrage_$21240_memory_ptr",
                              "typeString": "struct DemurrageStructs.Demurrage memory"
                            }
                          },
                          "id": 20634,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "user",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 21237,
                          "src": "10362:15:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_User_$21224_memory",
                            "typeString": "struct DemurrageStructs.User memory"
                          }
                        },
                        "id": 20635,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "no_demurrage_fee",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 21219,
                        "src": "10362:32:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "74727565",
                        "id": 20636,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "bool",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "10398:4:70",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "value": "true"
                      },
                      "src": "10362:40:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "||",
                    "rightExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "id": 20644,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 20638,
                            "name": "_demurrage",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20607,
                            "src": "10406:10:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Demurrage_$21240_memory_ptr",
                              "typeString": "struct DemurrageStructs.Demurrage memory"
                            }
                          },
                          "id": 20639,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "user",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 21237,
                          "src": "10406:15:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_User_$21224_memory",
                            "typeString": "struct DemurrageStructs.User memory"
                          }
                        },
                        "id": 20640,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "account",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 21217,
                        "src": "10406:23:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 20641,
                            "name": "_demurrage",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20607,
                            "src": "10433:10:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Demurrage_$21240_memory_ptr",
                              "typeString": "struct DemurrageStructs.Demurrage memory"
                            }
                          },
                          "id": 20642,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "config",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 21235,
                          "src": "10433:17:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Config_$21233_memory",
                            "typeString": "struct DemurrageStructs.Config memory"
                          }
                        },
                        "id": 20643,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "collector",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 21232,
                        "src": "10433:27:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "src": "10406:54:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "10362:98:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 20784,
                    "nodeType": "Block",
                    "src": "10683:695:70",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 20696,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 20685,
                                "name": "_demurrage",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 20607,
                                "src": "10691:10:70",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Demurrage_$21240_memory_ptr",
                                  "typeString": "struct DemurrageStructs.Demurrage memory"
                                }
                              },
                              "id": 20688,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "user",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 21237,
                              "src": "10691:15:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_User_$21224_memory",
                                "typeString": "struct DemurrageStructs.User memory"
                              }
                            },
                            "id": 20689,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "payment_date",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 21223,
                            "src": "10691:28:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_MutableTimestamp_$25209_memory",
                              "typeString": "struct Types.MutableTimestamp memory"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "31",
                                "id": 20694,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "10762:6:70",
                                "subdenomination": "days",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_86400_by_1",
                                  "typeString": "int_const 86400"
                                },
                                "value": "1"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_86400_by_1",
                                  "typeString": "int_const 86400"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 20690,
                                    "name": "_demurrage",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 20607,
                                    "src": "10722:10:70",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Demurrage_$21240_memory_ptr",
                                      "typeString": "struct DemurrageStructs.Demurrage memory"
                                    }
                                  },
                                  "id": 20691,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "user",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 21237,
                                  "src": "10722:15:70",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_User_$21224_memory",
                                    "typeString": "struct DemurrageStructs.User memory"
                                  }
                                },
                                "id": 20692,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "payment_date",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 21223,
                                "src": "10722:28:70",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_MutableTimestamp_$25209_memory",
                                  "typeString": "struct Types.MutableTimestamp memory"
                                }
                              },
                              "id": 20693,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "advance_by",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 25281,
                              "src": "10722:39:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_struct$_MutableTimestamp_$25209_memory_ptr_$_t_uint256_$returns$_t_struct$_MutableTimestamp_$25209_memory_ptr_$bound_to$_t_struct$_MutableTimestamp_$25209_memory_ptr_$",
                                "typeString": "function (struct Types.MutableTimestamp memory,uint256) view returns (struct Types.MutableTimestamp memory)"
                              }
                            },
                            "id": 20695,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "10722:47:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_MutableTimestamp_$25209_memory_ptr",
                              "typeString": "struct Types.MutableTimestamp memory"
                            }
                          },
                          "src": "10691:78:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_MutableTimestamp_$25209_memory",
                            "typeString": "struct Types.MutableTimestamp memory"
                          }
                        },
                        "id": 20697,
                        "nodeType": "ExpressionStatement",
                        "src": "10691:78:70"
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 20703,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 20698,
                                  "name": "_demurrage",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 20607,
                                  "src": "10781:10:70",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Demurrage_$21240_memory_ptr",
                                    "typeString": "struct DemurrageStructs.Demurrage memory"
                                  }
                                },
                                "id": 20699,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "user",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 21237,
                                "src": "10781:15:70",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_User_$21224_memory",
                                  "typeString": "struct DemurrageStructs.User memory"
                                }
                              },
                              "id": 20700,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "payment_date",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 21223,
                              "src": "10781:28:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_MutableTimestamp_$25209_memory",
                                "typeString": "struct Types.MutableTimestamp memory"
                              }
                            },
                            "id": 20701,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "in_units",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 25208,
                            "src": "10781:37:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 20702,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "10822:1:70",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "10781:42:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 20782,
                          "nodeType": "Block",
                          "src": "11000:372:70",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 20752,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 20731,
                                    "name": "_demurrage",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 20607,
                                    "src": "11010:10:70",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Demurrage_$21240_memory_ptr",
                                      "typeString": "struct DemurrageStructs.Demurrage memory"
                                    }
                                  },
                                  "id": 20733,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "memberName": "collected_fee",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 21239,
                                  "src": "11010:24:70",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 20751,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "components": [
                                      {
                                        "argumentTypes": null,
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 20746,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "argumentTypes": null,
                                          "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          "id": 20742,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "leftExpression": {
                                            "argumentTypes": null,
                                            "expression": {
                                              "argumentTypes": null,
                                              "expression": {
                                                "argumentTypes": null,
                                                "expression": {
                                                  "argumentTypes": null,
                                                  "id": 20734,
                                                  "name": "_demurrage",
                                                  "nodeType": "Identifier",
                                                  "overloadedDeclarations": [],
                                                  "referencedDeclaration": 20607,
                                                  "src": "11038:10:70",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_Demurrage_$21240_memory_ptr",
                                                    "typeString": "struct DemurrageStructs.Demurrage memory"
                                                  }
                                                },
                                                "id": 20735,
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "user",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 21237,
                                                "src": "11038:15:70",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_struct$_User_$21224_memory",
                                                  "typeString": "struct DemurrageStructs.User memory"
                                                }
                                              },
                                              "id": 20736,
                                              "isConstant": false,
                                              "isLValue": true,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "memberName": "payment_date",
                                              "nodeType": "MemberAccess",
                                              "referencedDeclaration": 21223,
                                              "src": "11038:28:70",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_MutableTimestamp_$25209_memory",
                                                "typeString": "struct Types.MutableTimestamp memory"
                                              }
                                            },
                                            "id": 20737,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "in_units",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 25208,
                                            "src": "11038:37:70",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "nodeType": "BinaryOperation",
                                          "operator": "*",
                                          "rightExpression": {
                                            "argumentTypes": null,
                                            "expression": {
                                              "argumentTypes": null,
                                              "expression": {
                                                "argumentTypes": null,
                                                "expression": {
                                                  "argumentTypes": null,
                                                  "id": 20738,
                                                  "name": "_demurrage",
                                                  "nodeType": "Identifier",
                                                  "overloadedDeclarations": [],
                                                  "referencedDeclaration": 20607,
                                                  "src": "11078:10:70",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_Demurrage_$21240_memory_ptr",
                                                    "typeString": "struct DemurrageStructs.Demurrage memory"
                                                  }
                                                },
                                                "id": 20739,
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "user",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 21237,
                                                "src": "11078:15:70",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_struct$_User_$21224_memory",
                                                  "typeString": "struct DemurrageStructs.User memory"
                                                }
                                              },
                                              "id": 20740,
                                              "isConstant": false,
                                              "isLValue": true,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "memberName": "balance",
                                              "nodeType": "MemberAccess",
                                              "referencedDeclaration": 21221,
                                              "src": "11078:23:70",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                                                "typeString": "struct Types.MutableUint memory"
                                              }
                                            },
                                            "id": 20741,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "pre",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 25201,
                                            "src": "11078:27:70",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "src": "11038:67:70",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "*",
                                        "rightExpression": {
                                          "argumentTypes": null,
                                          "expression": {
                                            "argumentTypes": null,
                                            "expression": {
                                              "argumentTypes": null,
                                              "id": 20743,
                                              "name": "_demurrage",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 20607,
                                              "src": "11108:10:70",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_Demurrage_$21240_memory_ptr",
                                                "typeString": "struct DemurrageStructs.Demurrage memory"
                                              }
                                            },
                                            "id": 20744,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "config",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 21235,
                                            "src": "11108:17:70",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_struct$_Config_$21233_memory",
                                              "typeString": "struct DemurrageStructs.Config memory"
                                            }
                                          },
                                          "id": 20745,
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "rate",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 21230,
                                          "src": "11108:22:70",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "src": "11038:92:70",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "id": 20747,
                                    "isConstant": false,
                                    "isInlineArray": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "TupleExpression",
                                    "src": "11037:94:70",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "/",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 20748,
                                        "name": "_demurrage",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 20607,
                                        "src": "11134:10:70",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_Demurrage_$21240_memory_ptr",
                                          "typeString": "struct DemurrageStructs.Demurrage memory"
                                        }
                                      },
                                      "id": 20749,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "config",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 21235,
                                      "src": "11134:17:70",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_Config_$21233_memory",
                                        "typeString": "struct DemurrageStructs.Config memory"
                                      }
                                    },
                                    "id": 20750,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "base",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 21228,
                                    "src": "11134:22:70",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "11037:119:70",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "11010:146:70",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 20753,
                              "nodeType": "ExpressionStatement",
                              "src": "11010:146:70"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 20766,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 20754,
                                      "name": "_demurrage",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 20607,
                                      "src": "11166:10:70",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_Demurrage_$21240_memory_ptr",
                                        "typeString": "struct DemurrageStructs.Demurrage memory"
                                      }
                                    },
                                    "id": 20757,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "user",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 21237,
                                    "src": "11166:15:70",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_User_$21224_memory",
                                      "typeString": "struct DemurrageStructs.User memory"
                                    }
                                  },
                                  "id": 20758,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "memberName": "balance",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 21221,
                                  "src": "11166:23:70",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                                    "typeString": "struct Types.MutableUint memory"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 20763,
                                        "name": "_demurrage",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 20607,
                                        "src": "11225:10:70",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_Demurrage_$21240_memory_ptr",
                                          "typeString": "struct DemurrageStructs.Demurrage memory"
                                        }
                                      },
                                      "id": 20764,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "collected_fee",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 21239,
                                      "src": "11225:24:70",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": null,
                                      "expression": {
                                        "argumentTypes": null,
                                        "expression": {
                                          "argumentTypes": null,
                                          "id": 20759,
                                          "name": "_demurrage",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 20607,
                                          "src": "11192:10:70",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_Demurrage_$21240_memory_ptr",
                                            "typeString": "struct DemurrageStructs.Demurrage memory"
                                          }
                                        },
                                        "id": 20760,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "user",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 21237,
                                        "src": "11192:15:70",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_User_$21224_memory",
                                          "typeString": "struct DemurrageStructs.User memory"
                                        }
                                      },
                                      "id": 20761,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "balance",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 21221,
                                      "src": "11192:23:70",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                                        "typeString": "struct Types.MutableUint memory"
                                      }
                                    },
                                    "id": 20762,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "subtract",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 25482,
                                    "src": "11192:32:70",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_struct$_MutableUint_$25204_memory_ptr_$_t_uint256_$returns$_t_struct$_MutableUint_$25204_memory_ptr_$bound_to$_t_struct$_MutableUint_$25204_memory_ptr_$",
                                      "typeString": "function (struct Types.MutableUint memory,uint256) pure returns (struct Types.MutableUint memory)"
                                    }
                                  },
                                  "id": 20765,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "11192:58:70",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_MutableUint_$25204_memory_ptr",
                                    "typeString": "struct Types.MutableUint memory"
                                  }
                                },
                                "src": "11166:84:70",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                                  "typeString": "struct Types.MutableUint memory"
                                }
                              },
                              "id": 20767,
                              "nodeType": "ExpressionStatement",
                              "src": "11166:84:70"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 20780,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 20768,
                                      "name": "_demurrage",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 20607,
                                      "src": "11260:10:70",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_Demurrage_$21240_memory_ptr",
                                        "typeString": "struct DemurrageStructs.Demurrage memory"
                                      }
                                    },
                                    "id": 20771,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "config",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 21235,
                                    "src": "11260:17:70",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Config_$21233_memory",
                                      "typeString": "struct DemurrageStructs.Config memory"
                                    }
                                  },
                                  "id": 20772,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "memberName": "collector_balance",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 21226,
                                  "src": "11260:35:70",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                                    "typeString": "struct Types.MutableUint memory"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 20777,
                                        "name": "_demurrage",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 20607,
                                        "src": "11338:10:70",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_Demurrage_$21240_memory_ptr",
                                          "typeString": "struct DemurrageStructs.Demurrage memory"
                                        }
                                      },
                                      "id": 20778,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "collected_fee",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 21239,
                                      "src": "11338:24:70",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": null,
                                      "expression": {
                                        "argumentTypes": null,
                                        "expression": {
                                          "argumentTypes": null,
                                          "id": 20773,
                                          "name": "_demurrage",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 20607,
                                          "src": "11298:10:70",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_Demurrage_$21240_memory_ptr",
                                            "typeString": "struct DemurrageStructs.Demurrage memory"
                                          }
                                        },
                                        "id": 20774,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "config",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 21235,
                                        "src": "11298:17:70",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_Config_$21233_memory",
                                          "typeString": "struct DemurrageStructs.Config memory"
                                        }
                                      },
                                      "id": 20775,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "collector_balance",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 21226,
                                      "src": "11298:35:70",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                                        "typeString": "struct Types.MutableUint memory"
                                      }
                                    },
                                    "id": 20776,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "add",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 25452,
                                    "src": "11298:39:70",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_struct$_MutableUint_$25204_memory_ptr_$_t_uint256_$returns$_t_struct$_MutableUint_$25204_memory_ptr_$bound_to$_t_struct$_MutableUint_$25204_memory_ptr_$",
                                      "typeString": "function (struct Types.MutableUint memory,uint256) pure returns (struct Types.MutableUint memory)"
                                    }
                                  },
                                  "id": 20779,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "11298:65:70",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_MutableUint_$25204_memory_ptr",
                                    "typeString": "struct Types.MutableUint memory"
                                  }
                                },
                                "src": "11260:103:70",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                                  "typeString": "struct Types.MutableUint memory"
                                }
                              },
                              "id": 20781,
                              "nodeType": "ExpressionStatement",
                              "src": "11260:103:70"
                            }
                          ]
                        },
                        "id": 20783,
                        "nodeType": "IfStatement",
                        "src": "10777:595:70",
                        "trueBody": {
                          "id": 20730,
                          "nodeType": "Block",
                          "src": "10825:169:70",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 20715,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 20704,
                                        "name": "_demurrage",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 20607,
                                        "src": "10835:10:70",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_Demurrage_$21240_memory_ptr",
                                          "typeString": "struct DemurrageStructs.Demurrage memory"
                                        }
                                      },
                                      "id": 20708,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "user",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 21237,
                                      "src": "10835:15:70",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_User_$21224_memory",
                                        "typeString": "struct DemurrageStructs.User memory"
                                      }
                                    },
                                    "id": 20709,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "balance",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 21221,
                                    "src": "10835:23:70",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                                      "typeString": "struct Types.MutableUint memory"
                                    }
                                  },
                                  "id": 20710,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "memberName": "post",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 25203,
                                  "src": "10835:28:70",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 20711,
                                        "name": "_demurrage",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 20607,
                                        "src": "10866:10:70",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_Demurrage_$21240_memory_ptr",
                                          "typeString": "struct DemurrageStructs.Demurrage memory"
                                        }
                                      },
                                      "id": 20712,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "user",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 21237,
                                      "src": "10866:15:70",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_User_$21224_memory",
                                        "typeString": "struct DemurrageStructs.User memory"
                                      }
                                    },
                                    "id": 20713,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "balance",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 21221,
                                    "src": "10866:23:70",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                                      "typeString": "struct Types.MutableUint memory"
                                    }
                                  },
                                  "id": 20714,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "pre",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 25201,
                                  "src": "10866:27:70",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "10835:58:70",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 20716,
                              "nodeType": "ExpressionStatement",
                              "src": "10835:58:70"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 20728,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 20717,
                                        "name": "_demurrage",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 20607,
                                        "src": "10903:10:70",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_Demurrage_$21240_memory_ptr",
                                          "typeString": "struct DemurrageStructs.Demurrage memory"
                                        }
                                      },
                                      "id": 20721,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "config",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 21235,
                                      "src": "10903:17:70",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_Config_$21233_memory",
                                        "typeString": "struct DemurrageStructs.Config memory"
                                      }
                                    },
                                    "id": 20722,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "collector_balance",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 21226,
                                    "src": "10903:35:70",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                                      "typeString": "struct Types.MutableUint memory"
                                    }
                                  },
                                  "id": 20723,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "memberName": "post",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 25203,
                                  "src": "10903:40:70",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 20724,
                                        "name": "_demurrage",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 20607,
                                        "src": "10946:10:70",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_Demurrage_$21240_memory_ptr",
                                          "typeString": "struct DemurrageStructs.Demurrage memory"
                                        }
                                      },
                                      "id": 20725,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "config",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 21235,
                                      "src": "10946:17:70",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_Config_$21233_memory",
                                        "typeString": "struct DemurrageStructs.Config memory"
                                      }
                                    },
                                    "id": 20726,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "collector_balance",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 21226,
                                    "src": "10946:35:70",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                                      "typeString": "struct Types.MutableUint memory"
                                    }
                                  },
                                  "id": 20727,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "pre",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 25201,
                                  "src": "10946:39:70",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "10903:82:70",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 20729,
                              "nodeType": "ExpressionStatement",
                              "src": "10903:82:70"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "id": 20785,
                  "nodeType": "IfStatement",
                  "src": "10358:1020:70",
                  "trueBody": {
                    "id": 20684,
                    "nodeType": "Block",
                    "src": "10462:215:70",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 20657,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 20646,
                                  "name": "_demurrage",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 20607,
                                  "src": "10470:10:70",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Demurrage_$21240_memory_ptr",
                                    "typeString": "struct DemurrageStructs.Demurrage memory"
                                  }
                                },
                                "id": 20650,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "user",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 21237,
                                "src": "10470:15:70",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_User_$21224_memory",
                                  "typeString": "struct DemurrageStructs.User memory"
                                }
                              },
                              "id": 20651,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "balance",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 21221,
                              "src": "10470:23:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                                "typeString": "struct Types.MutableUint memory"
                              }
                            },
                            "id": 20652,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "post",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 25203,
                            "src": "10470:28:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 20653,
                                  "name": "_demurrage",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 20607,
                                  "src": "10501:10:70",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Demurrage_$21240_memory_ptr",
                                    "typeString": "struct DemurrageStructs.Demurrage memory"
                                  }
                                },
                                "id": 20654,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "user",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 21237,
                                "src": "10501:15:70",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_User_$21224_memory",
                                  "typeString": "struct DemurrageStructs.User memory"
                                }
                              },
                              "id": 20655,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "balance",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 21221,
                              "src": "10501:23:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                                "typeString": "struct Types.MutableUint memory"
                              }
                            },
                            "id": 20656,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "pre",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 25201,
                            "src": "10501:27:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "10470:58:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 20658,
                        "nodeType": "ExpressionStatement",
                        "src": "10470:58:70"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 20670,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 20659,
                                  "name": "_demurrage",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 20607,
                                  "src": "10536:10:70",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Demurrage_$21240_memory_ptr",
                                    "typeString": "struct DemurrageStructs.Demurrage memory"
                                  }
                                },
                                "id": 20663,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "config",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 21235,
                                "src": "10536:17:70",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Config_$21233_memory",
                                  "typeString": "struct DemurrageStructs.Config memory"
                                }
                              },
                              "id": 20664,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "collector_balance",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 21226,
                              "src": "10536:35:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                                "typeString": "struct Types.MutableUint memory"
                              }
                            },
                            "id": 20665,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "post",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 25203,
                            "src": "10536:40:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 20666,
                                  "name": "_demurrage",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 20607,
                                  "src": "10579:10:70",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Demurrage_$21240_memory_ptr",
                                    "typeString": "struct DemurrageStructs.Demurrage memory"
                                  }
                                },
                                "id": 20667,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "config",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 21235,
                                "src": "10579:17:70",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Config_$21233_memory",
                                  "typeString": "struct DemurrageStructs.Config memory"
                                }
                              },
                              "id": 20668,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "collector_balance",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 21226,
                              "src": "10579:35:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                                "typeString": "struct Types.MutableUint memory"
                              }
                            },
                            "id": 20669,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "pre",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 25201,
                            "src": "10579:39:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "10536:82:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 20671,
                        "nodeType": "ExpressionStatement",
                        "src": "10536:82:70"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 20682,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 20672,
                                    "name": "_demurrage",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 20607,
                                    "src": "10626:10:70",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Demurrage_$21240_memory_ptr",
                                      "typeString": "struct DemurrageStructs.Demurrage memory"
                                    }
                                  },
                                  "id": 20677,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "user",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 21237,
                                  "src": "10626:15:70",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_User_$21224_memory",
                                    "typeString": "struct DemurrageStructs.User memory"
                                  }
                                },
                                "id": 20678,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "payment_date",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 21223,
                                "src": "10626:28:70",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_MutableTimestamp_$25209_memory",
                                  "typeString": "struct Types.MutableTimestamp memory"
                                }
                              },
                              "id": 20679,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "time",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 25206,
                              "src": "10626:33:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                                "typeString": "struct Types.MutableUint memory"
                              }
                            },
                            "id": 20680,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "post",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 25203,
                            "src": "10626:38:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 20681,
                            "name": "now",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 26184,
                            "src": "10667:3:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "10626:44:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 20683,
                        "nodeType": "ExpressionStatement",
                        "src": "10626:44:70"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 20788,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 20786,
                      "name": "_calculated",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20610,
                      "src": "11383:11:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Demurrage_$21240_memory_ptr",
                        "typeString": "struct DemurrageStructs.Demurrage memory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 20787,
                      "name": "_demurrage",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20607,
                      "src": "11397:10:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Demurrage_$21240_memory_ptr",
                        "typeString": "struct DemurrageStructs.Demurrage memory"
                      }
                    },
                    "src": "11383:24:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Demurrage_$21240_memory_ptr",
                      "typeString": "struct DemurrageStructs.Demurrage memory"
                    }
                  },
                  "id": 20789,
                  "nodeType": "ExpressionStatement",
                  "src": "11383:24:70"
                }
              ]
            },
            "documentation": null,
            "id": 20791,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "calculate_demurrage",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 20608,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20607,
                  "name": "_demurrage",
                  "nodeType": "VariableDeclaration",
                  "scope": 20791,
                  "src": "10056:44:70",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Demurrage_$21240_memory_ptr",
                    "typeString": "struct DemurrageStructs.Demurrage"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 20606,
                    "name": "DemurrageStructs.Demurrage",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21240,
                    "src": "10056:26:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Demurrage_$21240_storage_ptr",
                      "typeString": "struct DemurrageStructs.Demurrage"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10055:46:70"
            },
            "payable": false,
            "returnParameters": {
              "id": 20611,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20610,
                  "name": "_calculated",
                  "nodeType": "VariableDeclaration",
                  "scope": 20791,
                  "src": "10140:38:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Demurrage_$21240_memory_ptr",
                    "typeString": "struct DemurrageStructs.Demurrage"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 20609,
                    "name": "DemurrageStructs.Demurrage",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21240,
                    "src": "10140:26:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Demurrage_$21240_storage_ptr",
                      "typeString": "struct DemurrageStructs.Demurrage"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10139:40:70"
            },
            "scope": 21192,
            "src": "10027:1385:70",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "private"
          },
          {
            "body": {
              "id": 20835,
              "nodeType": "Block",
              "src": "11498:353:70",
              "statements": [
                {
                  "assignments": [
                    20801
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 20801,
                      "name": "_demurrage",
                      "nodeType": "VariableDeclaration",
                      "scope": 20836,
                      "src": "11504:44:70",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Demurrage_$21240_memory_ptr",
                        "typeString": "struct DemurrageStructs.Demurrage"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 20800,
                        "name": "DemurrageStructs.Demurrage",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 21240,
                        "src": "11504:26:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Demurrage_$21240_storage_ptr",
                          "typeString": "struct DemurrageStructs.Demurrage"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 20805,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 20803,
                        "name": "_user",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20793,
                        "src": "11571:5:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 20802,
                      "name": "get_demurraged_data",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20605,
                      "src": "11551:19:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_struct$_Demurrage_$21240_memory_ptr_$",
                        "typeString": "function (address) view returns (struct DemurrageStructs.Demurrage memory)"
                      }
                    },
                    "id": 20804,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11551:26:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Demurrage_$21240_memory_ptr",
                      "typeString": "struct DemurrageStructs.Demurrage memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "11504:73:70"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 20810,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 20806,
                      "name": "_demurrage",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20801,
                      "src": "11583:10:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Demurrage_$21240_memory_ptr",
                        "typeString": "struct DemurrageStructs.Demurrage memory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 20808,
                          "name": "_demurrage",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 20801,
                          "src": "11616:10:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Demurrage_$21240_memory_ptr",
                            "typeString": "struct DemurrageStructs.Demurrage memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_struct$_Demurrage_$21240_memory_ptr",
                            "typeString": "struct DemurrageStructs.Demurrage memory"
                          }
                        ],
                        "id": 20807,
                        "name": "calculate_demurrage",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20791,
                        "src": "11596:19:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_struct$_Demurrage_$21240_memory_ptr_$returns$_t_struct$_Demurrage_$21240_memory_ptr_$",
                          "typeString": "function (struct DemurrageStructs.Demurrage memory) view returns (struct DemurrageStructs.Demurrage memory)"
                        }
                      },
                      "id": 20809,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "11596:31:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Demurrage_$21240_memory_ptr",
                        "typeString": "struct DemurrageStructs.Demurrage memory"
                      }
                    },
                    "src": "11583:44:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Demurrage_$21240_memory_ptr",
                      "typeString": "struct DemurrageStructs.Demurrage memory"
                    }
                  },
                  "id": 20811,
                  "nodeType": "ExpressionStatement",
                  "src": "11583:44:70"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 20813,
                            "name": "_demurrage",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20801,
                            "src": "11666:10:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Demurrage_$21240_memory_ptr",
                              "typeString": "struct DemurrageStructs.Demurrage memory"
                            }
                          },
                          "id": 20814,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "user",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 21237,
                          "src": "11666:15:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_User_$21224_memory",
                            "typeString": "struct DemurrageStructs.User memory"
                          }
                        },
                        "id": 20815,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "account",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 21217,
                        "src": "11666:23:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 20816,
                              "name": "_demurrage",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 20801,
                              "src": "11697:10:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Demurrage_$21240_memory_ptr",
                                "typeString": "struct DemurrageStructs.Demurrage memory"
                              }
                            },
                            "id": 20817,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "user",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 21237,
                            "src": "11697:15:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_User_$21224_memory",
                              "typeString": "struct DemurrageStructs.User memory"
                            }
                          },
                          "id": 20818,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "balance",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 21221,
                          "src": "11697:23:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                            "typeString": "struct Types.MutableUint memory"
                          }
                        },
                        "id": 20819,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "post",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 25203,
                        "src": "11697:28:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 20820,
                                "name": "_demurrage",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 20801,
                                "src": "11733:10:70",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Demurrage_$21240_memory_ptr",
                                  "typeString": "struct DemurrageStructs.Demurrage memory"
                                }
                              },
                              "id": 20821,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "user",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 21237,
                              "src": "11733:15:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_User_$21224_memory",
                                "typeString": "struct DemurrageStructs.User memory"
                              }
                            },
                            "id": 20822,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "payment_date",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 21223,
                            "src": "11733:28:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_MutableTimestamp_$25209_memory",
                              "typeString": "struct Types.MutableTimestamp memory"
                            }
                          },
                          "id": 20823,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "time",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 25206,
                          "src": "11733:33:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                            "typeString": "struct Types.MutableUint memory"
                          }
                        },
                        "id": 20824,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "post",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 25203,
                        "src": "11733:38:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 20825,
                              "name": "_demurrage",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 20801,
                              "src": "11779:10:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Demurrage_$21240_memory_ptr",
                                "typeString": "struct DemurrageStructs.Demurrage memory"
                              }
                            },
                            "id": 20826,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "config",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 21235,
                            "src": "11779:17:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Config_$21233_memory",
                              "typeString": "struct DemurrageStructs.Config memory"
                            }
                          },
                          "id": 20827,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "collector_balance",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 21226,
                          "src": "11779:35:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                            "typeString": "struct Types.MutableUint memory"
                          }
                        },
                        "id": 20828,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "post",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 25203,
                        "src": "11779:40:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 20812,
                      "name": "update_user_for_demurrage",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20880,
                      "src": "11633:25:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256,uint256,uint256)"
                      }
                    },
                    "id": 20829,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11633:192:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 20830,
                  "nodeType": "ExpressionStatement",
                  "src": "11633:192:70"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 20833,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 20831,
                      "name": "_success",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20796,
                      "src": "11831:8:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "74727565",
                      "id": 20832,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "11842:4:70",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "true"
                    },
                    "src": "11831:15:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 20834,
                  "nodeType": "ExpressionStatement",
                  "src": "11831:15:70"
                }
              ]
            },
            "documentation": null,
            "id": 20836,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "deduct_demurrage",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 20794,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20793,
                  "name": "_user",
                  "nodeType": "VariableDeclaration",
                  "scope": 20836,
                  "src": "11442:13:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 20792,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "11442:7:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11441:15:70"
            },
            "payable": false,
            "returnParameters": {
              "id": 20797,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20796,
                  "name": "_success",
                  "nodeType": "VariableDeclaration",
                  "scope": 20836,
                  "src": "11481:13:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 20795,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "11481:4:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11480:15:70"
            },
            "scope": 21192,
            "src": "11416:435:70",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 20879,
              "nodeType": "Block",
              "src": "12030:229:70",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 20857,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 20847,
                              "name": "system",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 19681,
                              "src": "12036:6:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_System_$19679_storage",
                                "typeString": "struct DummyDGXStorage.System storage ref"
                              }
                            },
                            "id": 20852,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "users",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 19678,
                            "src": "12036:12:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_struct$_User_$19668_storage_$",
                              "typeString": "mapping(address => struct DummyDGXStorage.User storage ref)"
                            }
                          },
                          "id": 20853,
                          "indexExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 20849,
                                "name": "system",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 19681,
                                "src": "12049:6:70",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_System_$19679_storage",
                                  "typeString": "struct DummyDGXStorage.System storage ref"
                                }
                              },
                              "id": 20850,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "collectors",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 19670,
                              "src": "12049:17:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Collectors_$19649_storage",
                                "typeString": "struct DummyDGXStorage.Collectors storage ref"
                              }
                            },
                            "id": 20851,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "demurrage",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 19646,
                            "src": "12049:27:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "12036:41:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_User_$19668_storage",
                            "typeString": "struct DummyDGXStorage.User storage ref"
                          }
                        },
                        "id": 20854,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "data",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 19667,
                        "src": "12036:46:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_UserData_$19663_storage",
                          "typeString": "struct DummyDGXStorage.UserData storage ref"
                        }
                      },
                      "id": 20855,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "raw_balance",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 19658,
                      "src": "12036:58:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 20856,
                      "name": "_collector_new_balance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20844,
                      "src": "12097:22:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "12036:83:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 20858,
                  "nodeType": "ExpressionStatement",
                  "src": "12036:83:70"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 20867,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 20859,
                              "name": "system",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 19681,
                              "src": "12125:6:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_System_$19679_storage",
                                "typeString": "struct DummyDGXStorage.System storage ref"
                              }
                            },
                            "id": 20862,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "users",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 19678,
                            "src": "12125:12:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_struct$_User_$19668_storage_$",
                              "typeString": "mapping(address => struct DummyDGXStorage.User storage ref)"
                            }
                          },
                          "id": 20863,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 20861,
                            "name": "_user",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20838,
                            "src": "12138:5:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "12125:19:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_User_$19668_storage",
                            "typeString": "struct DummyDGXStorage.User storage ref"
                          }
                        },
                        "id": 20864,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "data",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 19667,
                        "src": "12125:24:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_UserData_$19663_storage",
                          "typeString": "struct DummyDGXStorage.UserData storage ref"
                        }
                      },
                      "id": 20865,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "raw_balance",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 19658,
                      "src": "12125:36:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 20866,
                      "name": "_user_new_balance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20840,
                      "src": "12164:17:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "12125:56:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 20868,
                  "nodeType": "ExpressionStatement",
                  "src": "12125:56:70"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 20877,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 20869,
                              "name": "system",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 19681,
                              "src": "12187:6:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_System_$19679_storage",
                                "typeString": "struct DummyDGXStorage.System storage ref"
                              }
                            },
                            "id": 20872,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "users",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 19678,
                            "src": "12187:12:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_struct$_User_$19668_storage_$",
                              "typeString": "mapping(address => struct DummyDGXStorage.User storage ref)"
                            }
                          },
                          "id": 20873,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 20871,
                            "name": "_user",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20838,
                            "src": "12200:5:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "12187:19:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_User_$19668_storage",
                            "typeString": "struct DummyDGXStorage.User storage ref"
                          }
                        },
                        "id": 20874,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "data",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 19667,
                        "src": "12187:24:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_UserData_$19663_storage",
                          "typeString": "struct DummyDGXStorage.UserData storage ref"
                        }
                      },
                      "id": 20875,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "last_payment_date",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 19656,
                      "src": "12187:42:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 20876,
                      "name": "_user_new_payment_date",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20842,
                      "src": "12232:22:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "12187:67:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 20878,
                  "nodeType": "ExpressionStatement",
                  "src": "12187:67:70"
                }
              ]
            },
            "documentation": null,
            "id": 20880,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "update_user_for_demurrage",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 20845,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20838,
                  "name": "_user",
                  "nodeType": "VariableDeclaration",
                  "scope": 20880,
                  "src": "11895:13:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 20837,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "11895:7:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 20840,
                  "name": "_user_new_balance",
                  "nodeType": "VariableDeclaration",
                  "scope": 20880,
                  "src": "11914:25:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 20839,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "11914:7:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 20842,
                  "name": "_user_new_payment_date",
                  "nodeType": "VariableDeclaration",
                  "scope": 20880,
                  "src": "11945:30:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 20841,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "11945:7:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 20844,
                  "name": "_collector_new_balance",
                  "nodeType": "VariableDeclaration",
                  "scope": 20880,
                  "src": "11981:30:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 20843,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "11981:7:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11889:126:70"
            },
            "payable": false,
            "returnParameters": {
              "id": 20846,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "12030:0:70"
            },
            "scope": 21192,
            "src": "11855:404:70",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "private"
          },
          {
            "body": {
              "id": 20951,
              "nodeType": "Block",
              "src": "12427:421:70",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 20891,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 20887,
                        "name": "_transfer",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20882,
                        "src": "12433:9:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                          "typeString": "struct TransferStructs.Transfer memory"
                        }
                      },
                      "id": 20889,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "fee",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 21289,
                      "src": "12433:13:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 20890,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "12449:1:70",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "12433:17:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 20892,
                  "nodeType": "ExpressionStatement",
                  "src": "12433:17:70"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 20902,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 20893,
                        "name": "_transfer",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20882,
                        "src": "12456:9:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                          "typeString": "struct TransferStructs.Transfer memory"
                        }
                      },
                      "id": 20895,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "received_amount",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 21285,
                      "src": "12456:25:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                        "typeString": "struct Types.MutableUint memory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 20899,
                            "name": "_transfer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20882,
                            "src": "12514:9:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                              "typeString": "struct TransferStructs.Transfer memory"
                            }
                          },
                          "id": 20900,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sent_amount",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 21287,
                          "src": "12514:21:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 20896,
                            "name": "_transfer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20882,
                            "src": "12484:9:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                              "typeString": "struct TransferStructs.Transfer memory"
                            }
                          },
                          "id": 20897,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "received_amount",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 21285,
                          "src": "12484:25:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                            "typeString": "struct Types.MutableUint memory"
                          }
                        },
                        "id": 20898,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "add",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 25452,
                        "src": "12484:29:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_struct$_MutableUint_$25204_memory_ptr_$_t_uint256_$returns$_t_struct$_MutableUint_$25204_memory_ptr_$bound_to$_t_struct$_MutableUint_$25204_memory_ptr_$",
                          "typeString": "function (struct Types.MutableUint memory,uint256) pure returns (struct Types.MutableUint memory)"
                        }
                      },
                      "id": 20901,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "12484:52:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_MutableUint_$25204_memory_ptr",
                        "typeString": "struct Types.MutableUint memory"
                      }
                    },
                    "src": "12456:80:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                      "typeString": "struct Types.MutableUint memory"
                    }
                  },
                  "id": 20903,
                  "nodeType": "ExpressionStatement",
                  "src": "12456:80:70"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 20917,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 20904,
                          "name": "_transfer",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 20882,
                          "src": "12542:9:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                            "typeString": "struct TransferStructs.Transfer memory"
                          }
                        },
                        "id": 20907,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 21277,
                        "src": "12542:16:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_User_$21257_memory",
                          "typeString": "struct TransferStructs.User memory"
                        }
                      },
                      "id": 20908,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "balance",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 21254,
                      "src": "12542:24:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                        "typeString": "struct Types.MutableUint memory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 20913,
                              "name": "_transfer",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 20882,
                              "src": "12603:9:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                                "typeString": "struct TransferStructs.Transfer memory"
                              }
                            },
                            "id": 20914,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "received_amount",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 21285,
                            "src": "12603:25:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                              "typeString": "struct Types.MutableUint memory"
                            }
                          },
                          "id": 20915,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "post",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 25203,
                          "src": "12603:30:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 20909,
                              "name": "_transfer",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 20882,
                              "src": "12569:9:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                                "typeString": "struct TransferStructs.Transfer memory"
                              }
                            },
                            "id": 20910,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 21277,
                            "src": "12569:16:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_User_$21257_memory",
                              "typeString": "struct TransferStructs.User memory"
                            }
                          },
                          "id": 20911,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "balance",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 21254,
                          "src": "12569:24:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                            "typeString": "struct Types.MutableUint memory"
                          }
                        },
                        "id": 20912,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "subtract",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 25482,
                        "src": "12569:33:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_struct$_MutableUint_$25204_memory_ptr_$_t_uint256_$returns$_t_struct$_MutableUint_$25204_memory_ptr_$bound_to$_t_struct$_MutableUint_$25204_memory_ptr_$",
                          "typeString": "function (struct Types.MutableUint memory,uint256) pure returns (struct Types.MutableUint memory)"
                        }
                      },
                      "id": 20916,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "12569:65:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_MutableUint_$25204_memory_ptr",
                        "typeString": "struct Types.MutableUint memory"
                      }
                    },
                    "src": "12542:92:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                      "typeString": "struct Types.MutableUint memory"
                    }
                  },
                  "id": 20918,
                  "nodeType": "ExpressionStatement",
                  "src": "12542:92:70"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 20930,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 20919,
                            "name": "_transfer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20882,
                            "src": "12640:9:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                              "typeString": "struct TransferStructs.Transfer memory"
                            }
                          },
                          "id": 20923,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "config",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 21283,
                          "src": "12640:16:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Config_$21275_memory",
                            "typeString": "struct TransferStructs.Config memory"
                          }
                        },
                        "id": 20924,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "collector_balance",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 21264,
                        "src": "12640:34:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                          "typeString": "struct Types.MutableUint memory"
                        }
                      },
                      "id": 20925,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "post",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 25203,
                      "src": "12640:39:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 20926,
                            "name": "_transfer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20882,
                            "src": "12682:9:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                              "typeString": "struct TransferStructs.Transfer memory"
                            }
                          },
                          "id": 20927,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "config",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 21283,
                          "src": "12682:16:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Config_$21275_memory",
                            "typeString": "struct TransferStructs.Config memory"
                          }
                        },
                        "id": 20928,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "collector_balance",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 21264,
                        "src": "12682:34:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                          "typeString": "struct Types.MutableUint memory"
                        }
                      },
                      "id": 20929,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "pre",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 25201,
                      "src": "12682:38:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "12640:80:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 20931,
                  "nodeType": "ExpressionStatement",
                  "src": "12640:80:70"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 20945,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 20932,
                          "name": "_transfer",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 20882,
                          "src": "12726:9:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                            "typeString": "struct TransferStructs.Transfer memory"
                          }
                        },
                        "id": 20935,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "recipient",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 21279,
                        "src": "12726:19:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_User_$21257_memory",
                          "typeString": "struct TransferStructs.User memory"
                        }
                      },
                      "id": 20936,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "balance",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 21254,
                      "src": "12726:27:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                        "typeString": "struct Types.MutableUint memory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 20941,
                              "name": "_transfer",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 20882,
                              "src": "12788:9:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                                "typeString": "struct TransferStructs.Transfer memory"
                              }
                            },
                            "id": 20942,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "received_amount",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 21285,
                            "src": "12788:25:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                              "typeString": "struct Types.MutableUint memory"
                            }
                          },
                          "id": 20943,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "post",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 25203,
                          "src": "12788:30:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 20937,
                              "name": "_transfer",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 20882,
                              "src": "12756:9:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                                "typeString": "struct TransferStructs.Transfer memory"
                              }
                            },
                            "id": 20938,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "recipient",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 21279,
                            "src": "12756:19:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_User_$21257_memory",
                              "typeString": "struct TransferStructs.User memory"
                            }
                          },
                          "id": 20939,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "balance",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 21254,
                          "src": "12756:27:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                            "typeString": "struct Types.MutableUint memory"
                          }
                        },
                        "id": 20940,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "add",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 25452,
                        "src": "12756:31:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_struct$_MutableUint_$25204_memory_ptr_$_t_uint256_$returns$_t_struct$_MutableUint_$25204_memory_ptr_$bound_to$_t_struct$_MutableUint_$25204_memory_ptr_$",
                          "typeString": "function (struct Types.MutableUint memory,uint256) pure returns (struct Types.MutableUint memory)"
                        }
                      },
                      "id": 20944,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "12756:63:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_MutableUint_$25204_memory_ptr",
                        "typeString": "struct Types.MutableUint memory"
                      }
                    },
                    "src": "12726:93:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                      "typeString": "struct Types.MutableUint memory"
                    }
                  },
                  "id": 20946,
                  "nodeType": "ExpressionStatement",
                  "src": "12726:93:70"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 20949,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 20947,
                      "name": "_built",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20885,
                      "src": "12825:6:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                        "typeString": "struct TransferStructs.Transfer memory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 20948,
                      "name": "_transfer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20882,
                      "src": "12834:9:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                        "typeString": "struct TransferStructs.Transfer memory"
                      }
                    },
                    "src": "12825:18:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                      "typeString": "struct TransferStructs.Transfer memory"
                    }
                  },
                  "id": 20950,
                  "nodeType": "ExpressionStatement",
                  "src": "12825:18:70"
                }
              ]
            },
            "documentation": null,
            "id": 20952,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "build_transfer_with_no_transfer_fee",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 20883,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20882,
                  "name": "_transfer",
                  "nodeType": "VariableDeclaration",
                  "scope": 20952,
                  "src": "12308:41:70",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                    "typeString": "struct TransferStructs.Transfer"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 20881,
                    "name": "TransferStructs.Transfer",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21292,
                    "src": "12308:24:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Transfer_$21292_storage_ptr",
                      "typeString": "struct TransferStructs.Transfer"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12307:43:70"
            },
            "payable": false,
            "returnParameters": {
              "id": 20886,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20885,
                  "name": "_built",
                  "nodeType": "VariableDeclaration",
                  "scope": 20952,
                  "src": "12385:38:70",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                    "typeString": "struct TransferStructs.Transfer"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 20884,
                    "name": "TransferStructs.Transfer",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21292,
                    "src": "12385:24:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Transfer_$21292_storage_ptr",
                      "typeString": "struct TransferStructs.Transfer"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12384:40:70"
            },
            "scope": 21192,
            "src": "12263:585:70",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "private"
          },
          {
            "body": {
              "id": 21042,
              "nodeType": "Block",
              "src": "13013:548:70",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 20973,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 20959,
                        "name": "_transfer",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20954,
                        "src": "13019:9:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                          "typeString": "struct TransferStructs.Transfer memory"
                        }
                      },
                      "id": 20961,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "fee",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 21289,
                      "src": "13019:13:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 20972,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "components": [
                          {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 20967,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 20962,
                                "name": "_transfer",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 20954,
                                "src": "13036:9:70",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                                  "typeString": "struct TransferStructs.Transfer memory"
                                }
                              },
                              "id": 20963,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sent_amount",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 21287,
                              "src": "13036:21:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "*",
                            "rightExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 20964,
                                  "name": "_transfer",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 20954,
                                  "src": "13060:9:70",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                                    "typeString": "struct TransferStructs.Transfer memory"
                                  }
                                },
                                "id": 20965,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "config",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 21283,
                                "src": "13060:16:70",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Config_$21275_memory",
                                  "typeString": "struct TransferStructs.Config memory"
                                }
                              },
                              "id": 20966,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "rate",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 21270,
                              "src": "13060:21:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "13036:45:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "id": 20968,
                        "isConstant": false,
                        "isInlineArray": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "TupleExpression",
                        "src": "13035:47:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "/",
                      "rightExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 20969,
                            "name": "_transfer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20954,
                            "src": "13085:9:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                              "typeString": "struct TransferStructs.Transfer memory"
                            }
                          },
                          "id": 20970,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "config",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 21283,
                          "src": "13085:16:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Config_$21275_memory",
                            "typeString": "struct TransferStructs.Config memory"
                          }
                        },
                        "id": 20971,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "base",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 21268,
                        "src": "13085:21:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "13035:71:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "13019:87:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 20974,
                  "nodeType": "ExpressionStatement",
                  "src": "13019:87:70"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 20982,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 20975,
                          "name": "_transfer",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 20954,
                          "src": "13112:9:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                            "typeString": "struct TransferStructs.Transfer memory"
                          }
                        },
                        "id": 20978,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "received_amount",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 21285,
                        "src": "13112:25:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                          "typeString": "struct Types.MutableUint memory"
                        }
                      },
                      "id": 20979,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "pre",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 25201,
                      "src": "13112:29:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 20980,
                        "name": "_transfer",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20954,
                        "src": "13144:9:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                          "typeString": "struct TransferStructs.Transfer memory"
                        }
                      },
                      "id": 20981,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sent_amount",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 21287,
                      "src": "13144:21:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "13112:53:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 20983,
                  "nodeType": "ExpressionStatement",
                  "src": "13112:53:70"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 20993,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 20984,
                        "name": "_transfer",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20954,
                        "src": "13171:9:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                          "typeString": "struct TransferStructs.Transfer memory"
                        }
                      },
                      "id": 20986,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "received_amount",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 21285,
                      "src": "13171:25:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                        "typeString": "struct Types.MutableUint memory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 20990,
                            "name": "_transfer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20954,
                            "src": "13234:9:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                              "typeString": "struct TransferStructs.Transfer memory"
                            }
                          },
                          "id": 20991,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "fee",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 21289,
                          "src": "13234:13:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 20987,
                            "name": "_transfer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20954,
                            "src": "13199:9:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                              "typeString": "struct TransferStructs.Transfer memory"
                            }
                          },
                          "id": 20988,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "received_amount",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 21285,
                          "src": "13199:25:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                            "typeString": "struct Types.MutableUint memory"
                          }
                        },
                        "id": 20989,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "subtract",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 25482,
                        "src": "13199:34:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_struct$_MutableUint_$25204_memory_ptr_$_t_uint256_$returns$_t_struct$_MutableUint_$25204_memory_ptr_$bound_to$_t_struct$_MutableUint_$25204_memory_ptr_$",
                          "typeString": "function (struct Types.MutableUint memory,uint256) pure returns (struct Types.MutableUint memory)"
                        }
                      },
                      "id": 20992,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "13199:49:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_MutableUint_$25204_memory_ptr",
                        "typeString": "struct Types.MutableUint memory"
                      }
                    },
                    "src": "13171:77:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                      "typeString": "struct Types.MutableUint memory"
                    }
                  },
                  "id": 20994,
                  "nodeType": "ExpressionStatement",
                  "src": "13171:77:70"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 21007,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 20995,
                          "name": "_transfer",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 20954,
                          "src": "13254:9:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                            "typeString": "struct TransferStructs.Transfer memory"
                          }
                        },
                        "id": 20998,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "config",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 21283,
                        "src": "13254:16:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Config_$21275_memory",
                          "typeString": "struct TransferStructs.Config memory"
                        }
                      },
                      "id": 20999,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "collector_balance",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 21264,
                      "src": "13254:34:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                        "typeString": "struct Types.MutableUint memory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 21004,
                            "name": "_transfer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20954,
                            "src": "13330:9:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                              "typeString": "struct TransferStructs.Transfer memory"
                            }
                          },
                          "id": 21005,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "fee",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 21289,
                          "src": "13330:13:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 21000,
                              "name": "_transfer",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 20954,
                              "src": "13291:9:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                                "typeString": "struct TransferStructs.Transfer memory"
                              }
                            },
                            "id": 21001,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "config",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 21283,
                            "src": "13291:16:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Config_$21275_memory",
                              "typeString": "struct TransferStructs.Config memory"
                            }
                          },
                          "id": 21002,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "collector_balance",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 21264,
                          "src": "13291:34:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                            "typeString": "struct Types.MutableUint memory"
                          }
                        },
                        "id": 21003,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "add",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 25452,
                        "src": "13291:38:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_struct$_MutableUint_$25204_memory_ptr_$_t_uint256_$returns$_t_struct$_MutableUint_$25204_memory_ptr_$bound_to$_t_struct$_MutableUint_$25204_memory_ptr_$",
                          "typeString": "function (struct Types.MutableUint memory,uint256) pure returns (struct Types.MutableUint memory)"
                        }
                      },
                      "id": 21006,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "13291:53:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_MutableUint_$25204_memory_ptr",
                        "typeString": "struct Types.MutableUint memory"
                      }
                    },
                    "src": "13254:90:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                      "typeString": "struct Types.MutableUint memory"
                    }
                  },
                  "id": 21008,
                  "nodeType": "ExpressionStatement",
                  "src": "13254:90:70"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 21021,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 21009,
                          "name": "_transfer",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 20954,
                          "src": "13350:9:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                            "typeString": "struct TransferStructs.Transfer memory"
                          }
                        },
                        "id": 21012,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 21277,
                        "src": "13350:16:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_User_$21257_memory",
                          "typeString": "struct TransferStructs.User memory"
                        }
                      },
                      "id": 21013,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "balance",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 21254,
                      "src": "13350:24:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                        "typeString": "struct Types.MutableUint memory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 21018,
                            "name": "_transfer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20954,
                            "src": "13411:9:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                              "typeString": "struct TransferStructs.Transfer memory"
                            }
                          },
                          "id": 21019,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sent_amount",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 21287,
                          "src": "13411:21:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 21014,
                              "name": "_transfer",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 20954,
                              "src": "13377:9:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                                "typeString": "struct TransferStructs.Transfer memory"
                              }
                            },
                            "id": 21015,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 21277,
                            "src": "13377:16:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_User_$21257_memory",
                              "typeString": "struct TransferStructs.User memory"
                            }
                          },
                          "id": 21016,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "balance",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 21254,
                          "src": "13377:24:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                            "typeString": "struct Types.MutableUint memory"
                          }
                        },
                        "id": 21017,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "subtract",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 25482,
                        "src": "13377:33:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_struct$_MutableUint_$25204_memory_ptr_$_t_uint256_$returns$_t_struct$_MutableUint_$25204_memory_ptr_$bound_to$_t_struct$_MutableUint_$25204_memory_ptr_$",
                          "typeString": "function (struct Types.MutableUint memory,uint256) pure returns (struct Types.MutableUint memory)"
                        }
                      },
                      "id": 21020,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "13377:56:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_MutableUint_$25204_memory_ptr",
                        "typeString": "struct Types.MutableUint memory"
                      }
                    },
                    "src": "13350:83:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                      "typeString": "struct Types.MutableUint memory"
                    }
                  },
                  "id": 21022,
                  "nodeType": "ExpressionStatement",
                  "src": "13350:83:70"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 21036,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 21023,
                          "name": "_transfer",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 20954,
                          "src": "13439:9:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                            "typeString": "struct TransferStructs.Transfer memory"
                          }
                        },
                        "id": 21026,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "recipient",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 21279,
                        "src": "13439:19:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_User_$21257_memory",
                          "typeString": "struct TransferStructs.User memory"
                        }
                      },
                      "id": 21027,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "balance",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 21254,
                      "src": "13439:27:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                        "typeString": "struct Types.MutableUint memory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 21032,
                              "name": "_transfer",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 20954,
                              "src": "13501:9:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                                "typeString": "struct TransferStructs.Transfer memory"
                              }
                            },
                            "id": 21033,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "received_amount",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 21285,
                            "src": "13501:25:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                              "typeString": "struct Types.MutableUint memory"
                            }
                          },
                          "id": 21034,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "post",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 25203,
                          "src": "13501:30:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 21028,
                              "name": "_transfer",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 20954,
                              "src": "13469:9:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                                "typeString": "struct TransferStructs.Transfer memory"
                              }
                            },
                            "id": 21029,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "recipient",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 21279,
                            "src": "13469:19:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_User_$21257_memory",
                              "typeString": "struct TransferStructs.User memory"
                            }
                          },
                          "id": 21030,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "balance",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 21254,
                          "src": "13469:27:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                            "typeString": "struct Types.MutableUint memory"
                          }
                        },
                        "id": 21031,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "add",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 25452,
                        "src": "13469:31:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_struct$_MutableUint_$25204_memory_ptr_$_t_uint256_$returns$_t_struct$_MutableUint_$25204_memory_ptr_$bound_to$_t_struct$_MutableUint_$25204_memory_ptr_$",
                          "typeString": "function (struct Types.MutableUint memory,uint256) pure returns (struct Types.MutableUint memory)"
                        }
                      },
                      "id": 21035,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "13469:63:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_MutableUint_$25204_memory_ptr",
                        "typeString": "struct Types.MutableUint memory"
                      }
                    },
                    "src": "13439:93:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                      "typeString": "struct Types.MutableUint memory"
                    }
                  },
                  "id": 21037,
                  "nodeType": "ExpressionStatement",
                  "src": "13439:93:70"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 21040,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 21038,
                      "name": "_built",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20957,
                      "src": "13538:6:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                        "typeString": "struct TransferStructs.Transfer memory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 21039,
                      "name": "_transfer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20954,
                      "src": "13547:9:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                        "typeString": "struct TransferStructs.Transfer memory"
                      }
                    },
                    "src": "13538:18:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                      "typeString": "struct TransferStructs.Transfer memory"
                    }
                  },
                  "id": 21041,
                  "nodeType": "ExpressionStatement",
                  "src": "13538:18:70"
                }
              ]
            },
            "documentation": null,
            "id": 21043,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "build_transfer_with_transfer_fee",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 20955,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20954,
                  "name": "_transfer",
                  "nodeType": "VariableDeclaration",
                  "scope": 21043,
                  "src": "12894:41:70",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                    "typeString": "struct TransferStructs.Transfer"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 20953,
                    "name": "TransferStructs.Transfer",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21292,
                    "src": "12894:24:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Transfer_$21292_storage_ptr",
                      "typeString": "struct TransferStructs.Transfer"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12893:43:70"
            },
            "payable": false,
            "returnParameters": {
              "id": 20958,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20957,
                  "name": "_built",
                  "nodeType": "VariableDeclaration",
                  "scope": 21043,
                  "src": "12971:38:70",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Transfer_$21292_memory_ptr",
                    "typeString": "struct TransferStructs.Transfer"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 20956,
                    "name": "TransferStructs.Transfer",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21292,
                    "src": "12971:24:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Transfer_$21292_storage_ptr",
                      "typeString": "struct TransferStructs.Transfer"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12970:40:70"
            },
            "scope": 21192,
            "src": "12852:709:70",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "private"
          },
          {
            "body": {
              "id": 21070,
              "nodeType": "Block",
              "src": "13725:105:70",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 21064,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 21054,
                                "name": "system",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 19681,
                                "src": "13731:6:70",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_System_$19679_storage",
                                  "typeString": "struct DummyDGXStorage.System storage ref"
                                }
                              },
                              "id": 21057,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "users",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 19678,
                              "src": "13731:12:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_User_$19668_storage_$",
                                "typeString": "mapping(address => struct DummyDGXStorage.User storage ref)"
                              }
                            },
                            "id": 21058,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 21056,
                              "name": "_account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 21045,
                              "src": "13744:8:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "13731:22:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_User_$19668_storage",
                              "typeString": "struct DummyDGXStorage.User storage ref"
                            }
                          },
                          "id": 21059,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "data",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 19667,
                          "src": "13731:27:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_UserData_$19663_storage",
                            "typeString": "struct DummyDGXStorage.UserData storage ref"
                          }
                        },
                        "id": 21060,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "spender_allowances",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 19662,
                        "src": "13731:46:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 21062,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 21061,
                        "name": "_spender",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21047,
                        "src": "13778:8:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "13731:56:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 21063,
                      "name": "_new_allowance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21049,
                      "src": "13790:14:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "13731:73:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 21065,
                  "nodeType": "ExpressionStatement",
                  "src": "13731:73:70"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 21068,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 21066,
                      "name": "_success",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21052,
                      "src": "13810:8:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "74727565",
                      "id": 21067,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "13821:4:70",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "true"
                    },
                    "src": "13810:15:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 21069,
                  "nodeType": "ExpressionStatement",
                  "src": "13810:15:70"
                }
              ]
            },
            "documentation": null,
            "id": 21071,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "update_account_spender_allowance",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 21050,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 21045,
                  "name": "_account",
                  "nodeType": "VariableDeclaration",
                  "scope": 21071,
                  "src": "13612:16:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 21044,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "13612:7:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 21047,
                  "name": "_spender",
                  "nodeType": "VariableDeclaration",
                  "scope": 21071,
                  "src": "13634:16:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 21046,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "13634:7:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 21049,
                  "name": "_new_allowance",
                  "nodeType": "VariableDeclaration",
                  "scope": 21071,
                  "src": "13656:22:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 21048,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "13656:7:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "13606:76:70"
            },
            "payable": false,
            "returnParameters": {
              "id": 21053,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 21052,
                  "name": "_success",
                  "nodeType": "VariableDeclaration",
                  "scope": 21071,
                  "src": "13708:13:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 21051,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "13708:4:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "13707:15:70"
            },
            "scope": 21192,
            "src": "13565:265:70",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "private"
          },
          {
            "body": {
              "id": 21122,
              "nodeType": "Block",
              "src": "14076:265:70",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 21094,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 21086,
                              "name": "system",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 19681,
                              "src": "14082:6:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_System_$19679_storage",
                                "typeString": "struct DummyDGXStorage.System storage ref"
                              }
                            },
                            "id": 21089,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "users",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 19678,
                            "src": "14082:12:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_struct$_User_$19668_storage_$",
                              "typeString": "mapping(address => struct DummyDGXStorage.User storage ref)"
                            }
                          },
                          "id": 21090,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 21088,
                            "name": "_sender",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 21073,
                            "src": "14095:7:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "14082:21:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_User_$19668_storage",
                            "typeString": "struct DummyDGXStorage.User storage ref"
                          }
                        },
                        "id": 21091,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "data",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 19667,
                        "src": "14082:26:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_UserData_$19663_storage",
                          "typeString": "struct DummyDGXStorage.UserData storage ref"
                        }
                      },
                      "id": 21092,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "raw_balance",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 19658,
                      "src": "14082:38:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 21093,
                      "name": "_sender_new_balance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21075,
                      "src": "14123:19:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "14082:60:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 21095,
                  "nodeType": "ExpressionStatement",
                  "src": "14082:60:70"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 21104,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 21096,
                              "name": "system",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 19681,
                              "src": "14148:6:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_System_$19679_storage",
                                "typeString": "struct DummyDGXStorage.System storage ref"
                              }
                            },
                            "id": 21099,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "users",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 19678,
                            "src": "14148:12:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_struct$_User_$19668_storage_$",
                              "typeString": "mapping(address => struct DummyDGXStorage.User storage ref)"
                            }
                          },
                          "id": 21100,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 21098,
                            "name": "_recipient",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 21077,
                            "src": "14161:10:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "14148:24:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_User_$19668_storage",
                            "typeString": "struct DummyDGXStorage.User storage ref"
                          }
                        },
                        "id": 21101,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "data",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 19667,
                        "src": "14148:29:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_UserData_$19663_storage",
                          "typeString": "struct DummyDGXStorage.UserData storage ref"
                        }
                      },
                      "id": 21102,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "raw_balance",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 19658,
                      "src": "14148:41:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 21103,
                      "name": "_recipient_new_balance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21079,
                      "src": "14192:22:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "14148:66:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 21105,
                  "nodeType": "ExpressionStatement",
                  "src": "14148:66:70"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 21116,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 21106,
                              "name": "system",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 19681,
                              "src": "14220:6:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_System_$19679_storage",
                                "typeString": "struct DummyDGXStorage.System storage ref"
                              }
                            },
                            "id": 21111,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "users",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 19678,
                            "src": "14220:12:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_struct$_User_$19668_storage_$",
                              "typeString": "mapping(address => struct DummyDGXStorage.User storage ref)"
                            }
                          },
                          "id": 21112,
                          "indexExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 21108,
                                "name": "system",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 19681,
                                "src": "14233:6:70",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_System_$19679_storage",
                                  "typeString": "struct DummyDGXStorage.System storage ref"
                                }
                              },
                              "id": 21109,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "collectors",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 19670,
                              "src": "14233:17:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Collectors_$19649_storage",
                                "typeString": "struct DummyDGXStorage.Collectors storage ref"
                              }
                            },
                            "id": 21110,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "transfer",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 19648,
                            "src": "14233:26:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "14220:40:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_User_$19668_storage",
                            "typeString": "struct DummyDGXStorage.User storage ref"
                          }
                        },
                        "id": 21113,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "data",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 19667,
                        "src": "14220:45:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_UserData_$19663_storage",
                          "typeString": "struct DummyDGXStorage.UserData storage ref"
                        }
                      },
                      "id": 21114,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "raw_balance",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 19658,
                      "src": "14220:57:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 21115,
                      "name": "_transfer_fee_collector_new_balance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21081,
                      "src": "14280:35:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "14220:95:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 21117,
                  "nodeType": "ExpressionStatement",
                  "src": "14220:95:70"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 21120,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 21118,
                      "name": "_success",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21084,
                      "src": "14321:8:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "74727565",
                      "id": 21119,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "14332:4:70",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "true"
                    },
                    "src": "14321:15:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 21121,
                  "nodeType": "ExpressionStatement",
                  "src": "14321:15:70"
                }
              ]
            },
            "documentation": null,
            "id": 21123,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "update_transfer_balance",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 21082,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 21073,
                  "name": "_sender",
                  "nodeType": "VariableDeclaration",
                  "scope": 21123,
                  "src": "13872:15:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 21072,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "13872:7:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 21075,
                  "name": "_sender_new_balance",
                  "nodeType": "VariableDeclaration",
                  "scope": 21123,
                  "src": "13893:27:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 21074,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "13893:7:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 21077,
                  "name": "_recipient",
                  "nodeType": "VariableDeclaration",
                  "scope": 21123,
                  "src": "13926:18:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 21076,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "13926:7:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 21079,
                  "name": "_recipient_new_balance",
                  "nodeType": "VariableDeclaration",
                  "scope": 21123,
                  "src": "13950:30:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 21078,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "13950:7:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 21081,
                  "name": "_transfer_fee_collector_new_balance",
                  "nodeType": "VariableDeclaration",
                  "scope": 21123,
                  "src": "13986:43:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 21080,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "13986:7:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "13866:167:70"
            },
            "payable": false,
            "returnParameters": {
              "id": 21085,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 21084,
                  "name": "_success",
                  "nodeType": "VariableDeclaration",
                  "scope": 21123,
                  "src": "14059:13:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 21083,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "14059:4:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "14058:15:70"
            },
            "scope": 21192,
            "src": "13834:507:70",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "private"
          },
          {
            "body": {
              "id": 21190,
              "nodeType": "Block",
              "src": "14650:351:70",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 21150,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 21142,
                              "name": "system",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 19681,
                              "src": "14656:6:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_System_$19679_storage",
                                "typeString": "struct DummyDGXStorage.System storage ref"
                              }
                            },
                            "id": 21145,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "users",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 19678,
                            "src": "14656:12:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_struct$_User_$19668_storage_$",
                              "typeString": "mapping(address => struct DummyDGXStorage.User storage ref)"
                            }
                          },
                          "id": 21146,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 21144,
                            "name": "_sender",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 21125,
                            "src": "14669:7:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "14656:21:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_User_$19668_storage",
                            "typeString": "struct DummyDGXStorage.User storage ref"
                          }
                        },
                        "id": 21147,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "data",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 19667,
                        "src": "14656:26:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_UserData_$19663_storage",
                          "typeString": "struct DummyDGXStorage.UserData storage ref"
                        }
                      },
                      "id": 21148,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "raw_balance",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 19658,
                      "src": "14656:38:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 21149,
                      "name": "_sender_new_balance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21127,
                      "src": "14697:19:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "14656:60:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 21151,
                  "nodeType": "ExpressionStatement",
                  "src": "14656:60:70"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 21160,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 21152,
                              "name": "system",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 19681,
                              "src": "14722:6:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_System_$19679_storage",
                                "typeString": "struct DummyDGXStorage.System storage ref"
                              }
                            },
                            "id": 21155,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "users",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 19678,
                            "src": "14722:12:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_struct$_User_$19668_storage_$",
                              "typeString": "mapping(address => struct DummyDGXStorage.User storage ref)"
                            }
                          },
                          "id": 21156,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 21154,
                            "name": "_recipient",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 21129,
                            "src": "14735:10:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "14722:24:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_User_$19668_storage",
                            "typeString": "struct DummyDGXStorage.User storage ref"
                          }
                        },
                        "id": 21157,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "data",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 19667,
                        "src": "14722:29:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_UserData_$19663_storage",
                          "typeString": "struct DummyDGXStorage.UserData storage ref"
                        }
                      },
                      "id": 21158,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "raw_balance",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 19658,
                      "src": "14722:41:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 21159,
                      "name": "_recipient_new_balance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21131,
                      "src": "14766:22:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "14722:66:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 21161,
                  "nodeType": "ExpressionStatement",
                  "src": "14722:66:70"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 21172,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 21162,
                              "name": "system",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 19681,
                              "src": "14794:6:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_System_$19679_storage",
                                "typeString": "struct DummyDGXStorage.System storage ref"
                              }
                            },
                            "id": 21167,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "users",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 19678,
                            "src": "14794:12:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_struct$_User_$19668_storage_$",
                              "typeString": "mapping(address => struct DummyDGXStorage.User storage ref)"
                            }
                          },
                          "id": 21168,
                          "indexExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 21164,
                                "name": "system",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 19681,
                                "src": "14807:6:70",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_System_$19679_storage",
                                  "typeString": "struct DummyDGXStorage.System storage ref"
                                }
                              },
                              "id": 21165,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "collectors",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 19670,
                              "src": "14807:17:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Collectors_$19649_storage",
                                "typeString": "struct DummyDGXStorage.Collectors storage ref"
                              }
                            },
                            "id": 21166,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "transfer",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 19648,
                            "src": "14807:26:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "14794:40:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_User_$19668_storage",
                            "typeString": "struct DummyDGXStorage.User storage ref"
                          }
                        },
                        "id": 21169,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "data",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 19667,
                        "src": "14794:45:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_UserData_$19663_storage",
                          "typeString": "struct DummyDGXStorage.UserData storage ref"
                        }
                      },
                      "id": 21170,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "raw_balance",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 19658,
                      "src": "14794:57:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 21171,
                      "name": "_transfer_fee_collector_new_balance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21133,
                      "src": "14854:35:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "14794:95:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 21173,
                  "nodeType": "ExpressionStatement",
                  "src": "14794:95:70"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 21184,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 21174,
                                "name": "system",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 19681,
                                "src": "14895:6:70",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_System_$19679_storage",
                                  "typeString": "struct DummyDGXStorage.System storage ref"
                                }
                              },
                              "id": 21177,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "users",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 19678,
                              "src": "14895:12:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_User_$19668_storage_$",
                                "typeString": "mapping(address => struct DummyDGXStorage.User storage ref)"
                              }
                            },
                            "id": 21178,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 21176,
                              "name": "_sender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 21125,
                              "src": "14908:7:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "14895:21:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_User_$19668_storage",
                              "typeString": "struct DummyDGXStorage.User storage ref"
                            }
                          },
                          "id": 21179,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "data",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 19667,
                          "src": "14895:26:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_UserData_$19663_storage",
                            "typeString": "struct DummyDGXStorage.UserData storage ref"
                          }
                        },
                        "id": 21180,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "spender_allowances",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 19662,
                        "src": "14895:45:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 21182,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 21181,
                        "name": "_spender",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21135,
                        "src": "14941:8:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "14895:55:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 21183,
                      "name": "_spender_new_allowance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21137,
                      "src": "14953:22:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "14895:80:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 21185,
                  "nodeType": "ExpressionStatement",
                  "src": "14895:80:70"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 21188,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 21186,
                      "name": "_success",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21140,
                      "src": "14981:8:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "74727565",
                      "id": 21187,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "14992:4:70",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "true"
                    },
                    "src": "14981:15:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 21189,
                  "nodeType": "ExpressionStatement",
                  "src": "14981:15:70"
                }
              ]
            },
            "documentation": null,
            "id": 21191,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "update_transfer_from_balance",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 21138,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 21125,
                  "name": "_sender",
                  "nodeType": "VariableDeclaration",
                  "scope": 21191,
                  "src": "14388:15:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 21124,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "14388:7:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 21127,
                  "name": "_sender_new_balance",
                  "nodeType": "VariableDeclaration",
                  "scope": 21191,
                  "src": "14409:27:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 21126,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "14409:7:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 21129,
                  "name": "_recipient",
                  "nodeType": "VariableDeclaration",
                  "scope": 21191,
                  "src": "14442:18:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 21128,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "14442:7:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 21131,
                  "name": "_recipient_new_balance",
                  "nodeType": "VariableDeclaration",
                  "scope": 21191,
                  "src": "14466:30:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 21130,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "14466:7:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 21133,
                  "name": "_transfer_fee_collector_new_balance",
                  "nodeType": "VariableDeclaration",
                  "scope": 21191,
                  "src": "14502:43:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 21132,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "14502:7:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 21135,
                  "name": "_spender",
                  "nodeType": "VariableDeclaration",
                  "scope": 21191,
                  "src": "14551:16:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 21134,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "14551:7:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 21137,
                  "name": "_spender_new_allowance",
                  "nodeType": "VariableDeclaration",
                  "scope": 21191,
                  "src": "14573:30:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 21136,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "14573:7:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "14382:225:70"
            },
            "payable": false,
            "returnParameters": {
              "id": 21141,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 21140,
                  "name": "_success",
                  "nodeType": "VariableDeclaration",
                  "scope": 21191,
                  "src": "14633:13:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 21139,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "14633:4:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "14632:15:70"
            },
            "scope": 21192,
            "src": "14345:656:70",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "private"
          }
        ],
        "scope": 21193,
        "src": "258:14745:70"
      }
    ],
    "src": "0:15004:70"
  },
  "compiler": {
    "name": "solc",
    "version": "0.4.25+commit.59dbf8f1.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "2.0.2",
  "updatedAt": "2020-03-13T02:38:46.131Z"
}