{
  "abi": [
    {
      "inputs": [
        {
          "internalType": "contract IOracle",
          "name": "_oracle",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [],
      "name": "AccountingExtension_InsufficientAllowance",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "AccountingExtension_InsufficientFunds",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "AccountingExtension_UnauthorizedModule",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "AccountingExtension_UnauthorizedUser",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "_requestId",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_bonder",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "contract IERC20",
          "name": "_token",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "Bonded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_depositor",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "contract IERC20",
          "name": "_token",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "Deposited",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "_requestId",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_beneficiary",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_payer",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "contract IERC20",
          "name": "_token",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "Paid",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "_requestId",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_beneficiary",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "contract IERC20",
          "name": "_token",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "Released",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_withdrawer",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "contract IERC20",
          "name": "_token",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "Withdrew",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "ORACLE",
      "outputs": [
        {
          "internalType": "contract IOracle",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_module",
          "type": "address"
        }
      ],
      "name": "approveModule",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_bonder",
          "type": "address"
        },
        {
          "internalType": "contract IERC20",
          "name": "_token",
          "type": "address"
        }
      ],
      "name": "balanceOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "_balance",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_bonder",
          "type": "address"
        },
        {
          "internalType": "bytes32",
          "name": "_requestId",
          "type": "bytes32"
        },
        {
          "internalType": "contract IERC20",
          "name": "_token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "_sender",
          "type": "address"
        }
      ],
      "name": "bond",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_bonder",
          "type": "address"
        },
        {
          "internalType": "bytes32",
          "name": "_requestId",
          "type": "bytes32"
        },
        {
          "internalType": "contract IERC20",
          "name": "_token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "bond",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_bonder",
          "type": "address"
        },
        {
          "internalType": "contract IERC20",
          "name": "_token",
          "type": "address"
        },
        {
          "internalType": "bytes32",
          "name": "_requestId",
          "type": "bytes32"
        }
      ],
      "name": "bondedAmountOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IERC20",
          "name": "_token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "deposit",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_requestId",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "_payer",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_receiver",
          "type": "address"
        },
        {
          "internalType": "contract IERC20",
          "name": "_token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "pay",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_bonder",
          "type": "address"
        },
        {
          "internalType": "bytes32",
          "name": "_requestId",
          "type": "bytes32"
        },
        {
          "internalType": "contract IERC20",
          "name": "_token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "release",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_module",
          "type": "address"
        }
      ],
      "name": "revokeModule",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_user",
          "type": "address"
        }
      ],
      "name": "userApprovedModules",
      "outputs": [
        {
          "internalType": "address[]",
          "name": "_approvedModules",
          "type": "address[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IERC20",
          "name": "_token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "withdraw",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": {
    "object": "0x60a060405234801561001057600080fd5b50604051611dfd380380611dfd83398101604081905261002f91610040565b6001600160a01b0316608052610070565b60006020828403121561005257600080fd5b81516001600160a01b038116811461006957600080fd5b9392505050565b608051611d346100c96000396000818160f3015281816103550152818161045b0152818161074f0152818161085501528181610a6901528181610b6f01528181610dd101528181610ed70152610fc80152611d346000f3fe608060405234801561001057600080fd5b50600436106100d45760003560e01c8063a69748b811610081578063cab0e4181161005b578063cab0e418146101fd578063f3fef3a314610210578063f7888aec1461022357600080fd5b8063a69748b8146101c4578063a6d09dc8146101d7578063bba9f26f146101ea57600080fd5b806347e7ef24116100b257806347e7ef241461017e5780634aa90d161461019157806396fa9e10146101a457600080fd5b806317825ef3146100d957806338013f02146100ee5780633c802fc51461013f575b600080fd5b6100ec6100e7366004611979565b61024b565b005b6101157f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61017061014d366004611996565b600160209081526000938452604080852082529284528284209052825290205481565b604051908152602001610136565b6100ec61018c3660046119d7565b610268565b6100ec61019f366004611a03565b61031e565b6101b76101b2366004611979565b6106c8565b6040516101369190611a62565b6100ec6101d2366004611979565b6106ff565b6100ec6101e5366004611abc565b610718565b6100ec6101f8366004611abc565b610a32565b6100ec61020b366004611b04565b610d9a565b6100ec61021e3660046119d7565b6111d4565b610170610231366004611b5f565b600060208181529281526040808220909352908152205481565b33600090815260026020526040902061026490826112cf565b5050565b61028a73ffffffffffffffffffffffffffffffffffffffff83163330846112f8565b3360009081526020818152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152812080548392906102c8908490611bc7565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff83169033907f8752a472e571a816aea92eec8dae9baf628e840f4929fbcc2d155e6233ff68a79060200160405180910390a35050565b6040517fc4a41c4f0000000000000000000000000000000000000000000000000000000081526004810185905233602482015284907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063c4a41c4f90604401602060405180830381865afa1580156103b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103d59190611bda565b61040b576040517f9e6e201500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fc44a89230000000000000000000000000000000000000000000000000000000081526004810186905273ffffffffffffffffffffffffffffffffffffffff8088166024830152869188917f0000000000000000000000000000000000000000000000000000000000000000169063c44a892390604401602060405180830381865afa1580156104a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104c69190611bda565b6104fc576040517f907c2e1d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8816600090815260026020526040902061052b90336113da565b80610560575073ffffffffffffffffffffffffffffffffffffffff8816600090815260026020526040902061056090856113da565b610596576040517f8588eb2500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff808916600090815260208181526040808320938a1683529290522054851115610600576040517f81faf71500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8089166000908152600160209081526040808320938a1683529281528282208a83529052908120805487929061064c908490611bc7565b909155505073ffffffffffffffffffffffffffffffffffffffff888116600081815260208181526040808320948b168084529482529182902080548a9003905590518881528a917f46f04ddc1effd1becc7cb7611a7fd2f9b672b1f0ab34ad69a51023d1abe9e5c1910160405180910390a45050505050505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526002602052604090206060906106f990611409565b92915050565b3360009081526002602052604090206102649082611416565b6040517fc4a41c4f0000000000000000000000000000000000000000000000000000000081526004810184905233602482015283907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063c4a41c4f90604401602060405180830381865afa1580156107ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107cf9190611bda565b610805576040517f9e6e201500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fc44a89230000000000000000000000000000000000000000000000000000000081526004810185905273ffffffffffffffffffffffffffffffffffffffff8087166024830152859187917f0000000000000000000000000000000000000000000000000000000000000000169063c44a892390604401602060405180830381865afa15801561089c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108c09190611bda565b6108f6576040517f907c2e1d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff808816600090815260016020908152604080832093891683529281528282208983529052205484111561096a576040517f81faf71500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff808816600090815260208181526040808320938916835292905290812080548692906109ac908490611bc7565b909155505073ffffffffffffffffffffffffffffffffffffffff8781166000818152600160209081526040808320948a168084529482528083208b845282529182902080548990039055905187815289917ff841af1340fe1d6814e6ec7893c8cc8939c12ee8d084afe073c5b10dc8fc794c91015b60405180910390a450505050505050565b6040517fc4a41c4f0000000000000000000000000000000000000000000000000000000081526004810184905233602482015283907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063c4a41c4f90604401602060405180830381865afa158015610ac5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ae99190611bda565b610b1f576040517f9e6e201500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fc44a89230000000000000000000000000000000000000000000000000000000081526004810185905273ffffffffffffffffffffffffffffffffffffffff8087166024830152859187917f0000000000000000000000000000000000000000000000000000000000000000169063c44a892390604401602060405180830381865afa158015610bb6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bda9190611bda565b610c10576040517f907c2e1d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff87166000908152600260205260409020610c3f90336113da565b610c75576040517f8588eb2500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff80881660009081526020818152604080832093891683529290522054841115610cdf576040517f81faf71500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600160209081526040808320938916835292815282822089835290529081208054869290610d2b908490611bc7565b909155505073ffffffffffffffffffffffffffffffffffffffff878116600081815260208181526040808320948a168084529482529182902080548990039055905187815289917f46f04ddc1effd1becc7cb7611a7fd2f9b672b1f0ab34ad69a51023d1abe9e5c19101610a21565b6040517fc4a41c4f0000000000000000000000000000000000000000000000000000000081526004810186905233602482015285907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063c4a41c4f90604401602060405180830381865afa158015610e2d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e519190611bda565b610e87576040517f9e6e201500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fc44a89230000000000000000000000000000000000000000000000000000000081526004810187905273ffffffffffffffffffffffffffffffffffffffff8087166024830152879187917f0000000000000000000000000000000000000000000000000000000000000000169063c44a892390604401602060405180830381865afa158015610f1e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f429190611bda565b610f78576040517f907c2e1d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fc44a89230000000000000000000000000000000000000000000000000000000081526004810189905273ffffffffffffffffffffffffffffffffffffffff8088166024830152899188917f0000000000000000000000000000000000000000000000000000000000000000169063c44a892390604401602060405180830381865afa15801561100f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110339190611bda565b611069576040517f907c2e1d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff808a166000908152600160209081526040808320938b1683529281528282208d8352905220548611156110dd576040517f81faf71500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff808916600090815260208181526040808320938b168352929052908120805488929061111f908490611bc7565b909155505073ffffffffffffffffffffffffffffffffffffffff808a1660008181526001602090815260408083208c8616845282528083208f84529091529081902080548a900390555190918a16908c907f060bb954af967ecb7aa08a0072a7f8fe308ceee2f5d15f4a9d4a5275a5fe79e9906111c0908c908c9073ffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b60405180910390a450505050505050505050565b3360009081526020818152604080832073ffffffffffffffffffffffffffffffffffffffff861684529091529020548181101561123d576040517f81faf71500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3360008181526020818152604080832073ffffffffffffffffffffffffffffffffffffffff881680855292529091208054859003905561127d9184611438565b60405182815273ffffffffffffffffffffffffffffffffffffffff84169033907f0472be967f9a37138dfea1875af44784cafb79f92044ab33d7d6958eddd9ca6c9060200160405180910390a3505050565b60006112f18373ffffffffffffffffffffffffffffffffffffffff8416611493565b9392505050565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526113d49085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526114e2565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260018301602052604081205415156112f1565b606060006112f1836115f6565b60006112f18373ffffffffffffffffffffffffffffffffffffffff8416611652565b60405173ffffffffffffffffffffffffffffffffffffffff831660248201526044810182905261148e9084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401611352565b505050565b60008181526001830160205260408120546114da575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556106f9565b5060006106f9565b6000611544826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166117459092919063ffffffff16565b90508051600014806115655750808060200190518101906115659190611bda565b61148e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b60608160000180548060200260200160405190810160405280929190818152602001828054801561164657602002820191906000526020600020905b815481526020019060010190808311611632575b50505050509050919050565b6000818152600183016020526040812054801561173b576000611676600183611bfc565b855490915060009061168a90600190611bfc565b90508181146116ef5760008660000182815481106116aa576116aa611c0f565b90600052602060002001549050808760000184815481106116cd576116cd611c0f565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061170057611700611c3e565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506106f9565b60009150506106f9565b6060611754848460008561175c565b949350505050565b6060824710156117ee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016115ed565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516118179190611c91565b60006040518083038185875af1925050503d8060008114611854576040519150601f19603f3d011682016040523d82523d6000602084013e611859565b606091505b509150915061186a87838387611875565b979650505050505050565b6060831561190b5782516000036119045773ffffffffffffffffffffffffffffffffffffffff85163b611904576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016115ed565b5081611754565b61175483838151156119205781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ed9190611cad565b73ffffffffffffffffffffffffffffffffffffffff8116811461197657600080fd5b50565b60006020828403121561198b57600080fd5b81356112f181611954565b6000806000606084860312156119ab57600080fd5b83356119b681611954565b925060208401356119c681611954565b929592945050506040919091013590565b600080604083850312156119ea57600080fd5b82356119f581611954565b946020939093013593505050565b600080600080600060a08688031215611a1b57600080fd5b8535611a2681611954565b9450602086013593506040860135611a3d81611954565b9250606086013591506080860135611a5481611954565b809150509295509295909350565b6020808252825182820181905260009190848201906040850190845b81811015611ab057835173ffffffffffffffffffffffffffffffffffffffff1683529284019291840191600101611a7e565b50909695505050505050565b60008060008060808587031215611ad257600080fd5b8435611add81611954565b9350602085013592506040850135611af481611954565b9396929550929360600135925050565b600080600080600060a08688031215611b1c57600080fd5b853594506020860135611b2e81611954565b93506040860135611b3e81611954565b92506060860135611b4e81611954565b949793965091946080013592915050565b60008060408385031215611b7257600080fd5b8235611b7d81611954565b91506020830135611b8d81611954565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156106f9576106f9611b98565b600060208284031215611bec57600080fd5b815180151581146112f157600080fd5b818103818111156106f9576106f9611b98565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b60005b83811015611c88578181015183820152602001611c70565b50506000910152565b60008251611ca3818460208701611c6d565b9190910192915050565b6020815260008251806020840152611ccc816040850160208701611c6d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fea2646970667358221220bdf51b423e46d8f15a2ae258e6504d071fefa8794ce05357ecc931deb0df4c5964736f6c63430008130033",
    "sourceMap": "489:4814:38:-:0;;;1184:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1219:16:38;;;489:4814;;14:306:113;100:6;153:2;141:9;132:7;128:23;124:32;121:52;;;169:1;166;159:12;121:52;195:16;;-1:-1:-1;;;;;240:31:113;;230:42;;220:70;;286:1;283;276:12;220:70;309:5;14:306;-1:-1:-1;;;14:306:113:o;:::-;489:4814:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;",
    "linkReferences": {}
  },
  "deployedBytecode": {
    "object": "0x608060405234801561001057600080fd5b50600436106100d45760003560e01c8063a69748b811610081578063cab0e4181161005b578063cab0e418146101fd578063f3fef3a314610210578063f7888aec1461022357600080fd5b8063a69748b8146101c4578063a6d09dc8146101d7578063bba9f26f146101ea57600080fd5b806347e7ef24116100b257806347e7ef241461017e5780634aa90d161461019157806396fa9e10146101a457600080fd5b806317825ef3146100d957806338013f02146100ee5780633c802fc51461013f575b600080fd5b6100ec6100e7366004611979565b61024b565b005b6101157f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61017061014d366004611996565b600160209081526000938452604080852082529284528284209052825290205481565b604051908152602001610136565b6100ec61018c3660046119d7565b610268565b6100ec61019f366004611a03565b61031e565b6101b76101b2366004611979565b6106c8565b6040516101369190611a62565b6100ec6101d2366004611979565b6106ff565b6100ec6101e5366004611abc565b610718565b6100ec6101f8366004611abc565b610a32565b6100ec61020b366004611b04565b610d9a565b6100ec61021e3660046119d7565b6111d4565b610170610231366004611b5f565b600060208181529281526040808220909352908152205481565b33600090815260026020526040902061026490826112cf565b5050565b61028a73ffffffffffffffffffffffffffffffffffffffff83163330846112f8565b3360009081526020818152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152812080548392906102c8908490611bc7565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff83169033907f8752a472e571a816aea92eec8dae9baf628e840f4929fbcc2d155e6233ff68a79060200160405180910390a35050565b6040517fc4a41c4f0000000000000000000000000000000000000000000000000000000081526004810185905233602482015284907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063c4a41c4f90604401602060405180830381865afa1580156103b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103d59190611bda565b61040b576040517f9e6e201500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fc44a89230000000000000000000000000000000000000000000000000000000081526004810186905273ffffffffffffffffffffffffffffffffffffffff8088166024830152869188917f0000000000000000000000000000000000000000000000000000000000000000169063c44a892390604401602060405180830381865afa1580156104a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104c69190611bda565b6104fc576040517f907c2e1d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8816600090815260026020526040902061052b90336113da565b80610560575073ffffffffffffffffffffffffffffffffffffffff8816600090815260026020526040902061056090856113da565b610596576040517f8588eb2500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff808916600090815260208181526040808320938a1683529290522054851115610600576040517f81faf71500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8089166000908152600160209081526040808320938a1683529281528282208a83529052908120805487929061064c908490611bc7565b909155505073ffffffffffffffffffffffffffffffffffffffff888116600081815260208181526040808320948b168084529482529182902080548a9003905590518881528a917f46f04ddc1effd1becc7cb7611a7fd2f9b672b1f0ab34ad69a51023d1abe9e5c1910160405180910390a45050505050505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526002602052604090206060906106f990611409565b92915050565b3360009081526002602052604090206102649082611416565b6040517fc4a41c4f0000000000000000000000000000000000000000000000000000000081526004810184905233602482015283907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063c4a41c4f90604401602060405180830381865afa1580156107ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107cf9190611bda565b610805576040517f9e6e201500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fc44a89230000000000000000000000000000000000000000000000000000000081526004810185905273ffffffffffffffffffffffffffffffffffffffff8087166024830152859187917f0000000000000000000000000000000000000000000000000000000000000000169063c44a892390604401602060405180830381865afa15801561089c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108c09190611bda565b6108f6576040517f907c2e1d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff808816600090815260016020908152604080832093891683529281528282208983529052205484111561096a576040517f81faf71500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff808816600090815260208181526040808320938916835292905290812080548692906109ac908490611bc7565b909155505073ffffffffffffffffffffffffffffffffffffffff8781166000818152600160209081526040808320948a168084529482528083208b845282529182902080548990039055905187815289917ff841af1340fe1d6814e6ec7893c8cc8939c12ee8d084afe073c5b10dc8fc794c91015b60405180910390a450505050505050565b6040517fc4a41c4f0000000000000000000000000000000000000000000000000000000081526004810184905233602482015283907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063c4a41c4f90604401602060405180830381865afa158015610ac5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ae99190611bda565b610b1f576040517f9e6e201500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fc44a89230000000000000000000000000000000000000000000000000000000081526004810185905273ffffffffffffffffffffffffffffffffffffffff8087166024830152859187917f0000000000000000000000000000000000000000000000000000000000000000169063c44a892390604401602060405180830381865afa158015610bb6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bda9190611bda565b610c10576040517f907c2e1d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff87166000908152600260205260409020610c3f90336113da565b610c75576040517f8588eb2500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff80881660009081526020818152604080832093891683529290522054841115610cdf576040517f81faf71500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600160209081526040808320938916835292815282822089835290529081208054869290610d2b908490611bc7565b909155505073ffffffffffffffffffffffffffffffffffffffff878116600081815260208181526040808320948a168084529482529182902080548990039055905187815289917f46f04ddc1effd1becc7cb7611a7fd2f9b672b1f0ab34ad69a51023d1abe9e5c19101610a21565b6040517fc4a41c4f0000000000000000000000000000000000000000000000000000000081526004810186905233602482015285907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063c4a41c4f90604401602060405180830381865afa158015610e2d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e519190611bda565b610e87576040517f9e6e201500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fc44a89230000000000000000000000000000000000000000000000000000000081526004810187905273ffffffffffffffffffffffffffffffffffffffff8087166024830152879187917f0000000000000000000000000000000000000000000000000000000000000000169063c44a892390604401602060405180830381865afa158015610f1e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f429190611bda565b610f78576040517f907c2e1d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fc44a89230000000000000000000000000000000000000000000000000000000081526004810189905273ffffffffffffffffffffffffffffffffffffffff8088166024830152899188917f0000000000000000000000000000000000000000000000000000000000000000169063c44a892390604401602060405180830381865afa15801561100f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110339190611bda565b611069576040517f907c2e1d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff808a166000908152600160209081526040808320938b1683529281528282208d8352905220548611156110dd576040517f81faf71500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff808916600090815260208181526040808320938b168352929052908120805488929061111f908490611bc7565b909155505073ffffffffffffffffffffffffffffffffffffffff808a1660008181526001602090815260408083208c8616845282528083208f84529091529081902080548a900390555190918a16908c907f060bb954af967ecb7aa08a0072a7f8fe308ceee2f5d15f4a9d4a5275a5fe79e9906111c0908c908c9073ffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b60405180910390a450505050505050505050565b3360009081526020818152604080832073ffffffffffffffffffffffffffffffffffffffff861684529091529020548181101561123d576040517f81faf71500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3360008181526020818152604080832073ffffffffffffffffffffffffffffffffffffffff881680855292529091208054859003905561127d9184611438565b60405182815273ffffffffffffffffffffffffffffffffffffffff84169033907f0472be967f9a37138dfea1875af44784cafb79f92044ab33d7d6958eddd9ca6c9060200160405180910390a3505050565b60006112f18373ffffffffffffffffffffffffffffffffffffffff8416611493565b9392505050565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526113d49085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526114e2565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260018301602052604081205415156112f1565b606060006112f1836115f6565b60006112f18373ffffffffffffffffffffffffffffffffffffffff8416611652565b60405173ffffffffffffffffffffffffffffffffffffffff831660248201526044810182905261148e9084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401611352565b505050565b60008181526001830160205260408120546114da575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556106f9565b5060006106f9565b6000611544826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166117459092919063ffffffff16565b90508051600014806115655750808060200190518101906115659190611bda565b61148e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b60608160000180548060200260200160405190810160405280929190818152602001828054801561164657602002820191906000526020600020905b815481526020019060010190808311611632575b50505050509050919050565b6000818152600183016020526040812054801561173b576000611676600183611bfc565b855490915060009061168a90600190611bfc565b90508181146116ef5760008660000182815481106116aa576116aa611c0f565b90600052602060002001549050808760000184815481106116cd576116cd611c0f565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061170057611700611c3e565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506106f9565b60009150506106f9565b6060611754848460008561175c565b949350505050565b6060824710156117ee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016115ed565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516118179190611c91565b60006040518083038185875af1925050503d8060008114611854576040519150601f19603f3d011682016040523d82523d6000602084013e611859565b606091505b509150915061186a87838387611875565b979650505050505050565b6060831561190b5782516000036119045773ffffffffffffffffffffffffffffffffffffffff85163b611904576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016115ed565b5081611754565b61175483838151156119205781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ed9190611cad565b73ffffffffffffffffffffffffffffffffffffffff8116811461197657600080fd5b50565b60006020828403121561198b57600080fd5b81356112f181611954565b6000806000606084860312156119ab57600080fd5b83356119b681611954565b925060208401356119c681611954565b929592945050506040919091013590565b600080604083850312156119ea57600080fd5b82356119f581611954565b946020939093013593505050565b600080600080600060a08688031215611a1b57600080fd5b8535611a2681611954565b9450602086013593506040860135611a3d81611954565b9250606086013591506080860135611a5481611954565b809150509295509295909350565b6020808252825182820181905260009190848201906040850190845b81811015611ab057835173ffffffffffffffffffffffffffffffffffffffff1683529284019291840191600101611a7e565b50909695505050505050565b60008060008060808587031215611ad257600080fd5b8435611add81611954565b9350602085013592506040850135611af481611954565b9396929550929360600135925050565b600080600080600060a08688031215611b1c57600080fd5b853594506020860135611b2e81611954565b93506040860135611b3e81611954565b92506060860135611b4e81611954565b949793965091946080013592915050565b60008060408385031215611b7257600080fd5b8235611b7d81611954565b91506020830135611b8d81611954565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156106f9576106f9611b98565b600060208284031215611bec57600080fd5b815180151581146112f157600080fd5b818103818111156106f9576106f9611b98565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b60005b83811015611c88578181015183820152602001611c70565b50506000910152565b60008251611ca3818460208701611c6d565b9190910192915050565b6020815260008251806020840152611ccc816040850160208701611c6d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fea2646970667358221220bdf51b423e46d8f15a2ae258e6504d071fefa8794ce05357ecc931deb0df4c5964736f6c63430008130033",
    "sourceMap": "489:4814:38:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4865:95;;;;;;:::i;:::-;;:::i;:::-;;668:31;;;;;;;;617:42:113;605:55;;;587:74;;575:2;560:18;668:31:38;;;;;;;;874:126;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1294:25:113;;;1282:2;1267:18;874:126:38;1148:177:113;1713:223:38;;;;;;:::i;:::-;;:::i;3650:644::-;;;;;;:::i;:::-;;:::i;5143:158::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;5003:97::-;;;;;;:::i;:::-;;:::i;4337:485::-;;;;;;:::i;:::-;;:::i;3041:566::-;;;;;;:::i;:::-;;:::i;2384:614::-;;;;;;:::i;:::-;;:::i;1979:362::-;;;;;;:::i;:::-;;:::i;743:87::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;4865:95;4931:10;4920:22;;;;:10;:22;;;;;:35;;4947:7;4920:26;:35::i;:::-;;4865:95;:::o;1713:223::-;1777:59;:23;;;1801:10;1821:4;1828:7;1777:23;:59::i;:::-;1852:10;1842:9;:21;;;;;;;;;;;;:29;;;;;;;;;:40;;1875:7;;1842:9;:40;;1875:7;;1842:40;:::i;:::-;;;;-1:-1:-1;;1893:38:38;;1294:25:113;;;1893:38:38;;;;1903:10;;1893:38;;1282:2:113;1267:18;1893:38:38;;;;;;;1713:223;;:::o;3650:644::-;1392:44;;;;;;;;5171:25:113;;;1425:10:38;5212:18:113;;;5205:83;3801:10:38;;1392:6;:20;;;;;5144:18:113;;1392:44:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1387:98;;1445:40;;;;;;;;;;;;;;1387:98;1572:39:::1;::::0;;;;::::1;::::0;::::1;5171:25:113::0;;;1572:20:38::1;5232:55:113::0;;;5212:18;;;5205:83;3829:10:38;;3841:7;;1572:6:::1;:20;::::0;::::1;::::0;5144:18:113;;1572:39:38::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1567:91;;1620:38;;;;;;;;;;;;;;1567:91;3862:19:::2;::::0;::::2;;::::0;;;:10:::2;:19;::::0;;;;:40:::2;::::0;3891:10:::2;3862:28;:40::i;:::-;:81;;;-1:-1:-1::0;3906:19:38::2;::::0;::::2;;::::0;;;:10:::2;:19;::::0;;;;:37:::2;::::0;3935:7;3906:28:::2;:37::i;:::-;3856:155;;3961:43;;;;;;;;;;;;;;3856:155;4020:18;::::0;;::::2;:9;:18:::0;;;::::2;::::0;;;;;;;:26;;::::2;::::0;;;;;;;:36;-1:-1:-1;4016:88:38::2;;;4065:39;;;;;;;;;;;;;;4016:88;4111:23;::::0;;::::2;;::::0;;;:14:::2;:23;::::0;;;;;;;:31;;::::2;::::0;;;;;;;;:43;;;;;;;;:54;;4158:7;;4111:23;:54:::2;::::0;4158:7;;4111:54:::2;:::i;:::-;::::0;;;-1:-1:-1;;4190:18:38::2;::::0;;::::2;:9;:18:::0;;;::::2;::::0;;;;;;;:26;;::::2;::::0;;;;;;;;;;:37;;;;::::2;::::0;;4245:44;;1294:25:113;;;4252:10:38;;4245:44:::2;::::0;1267:18:113;4245:44:38::2;;;;;;;1491:1:::1;;3650:644:::0;;;;;;:::o;5143:158::-;5270:17;;;;;;;:10;:17;;;;;5210:33;;5270:26;;:24;:26::i;:::-;5251:45;5143:158;-1:-1:-1;;5143:158:38:o;5003:97::-;5068:10;5057:22;;;;:10;:22;;;;;:38;;5087:7;5057:29;:38::i;4337:485::-;1392:44;;;;;;;;5171:25:113;;;1425:10:38;5212:18:113;;;5205:83;4470:10:38;;1392:6;:20;;;;;5144:18:113;;1392:44:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1387:98;;1445:40;;;;;;;;;;;;;;1387:98;1572:39:::1;::::0;;;;::::1;::::0;::::1;5171:25:113::0;;;1572:20:38::1;5232:55:113::0;;;5212:18;;;5205:83;4498:10:38;;4510:7;;1572:6:::1;:20;::::0;::::1;::::0;5144:18:113;;1572:39:38::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1567:91;;1620:38;;;;;;;;;;;;;;1567:91;4529:23:::2;::::0;;::::2;;::::0;;;:14:::2;:23;::::0;;;;;;;:31;;::::2;::::0;;;;;;;;:43;;;;;;;:53;-1:-1:-1;4525:105:38::2;;;4591:39;;;;;;;;;;;;;;4525:105;4637:18;::::0;;::::2;:9;:18:::0;;;::::2;::::0;;;;;;;:26;;::::2;::::0;;;;;;;;:37;;4667:7;;4637:9;:37:::2;::::0;4667:7;;4637:37:::2;:::i;:::-;::::0;;;-1:-1:-1;;4699:23:38::2;::::0;;::::2;;::::0;;;:14:::2;:23;::::0;;;;;;;:31;;::::2;::::0;;;;;;;;;:43;;;;;;;;;:54;;;;::::2;::::0;;4771:46;;1294:25:113;;;4699:43:38;;4771:46:::2;::::0;1267:18:113;4771:46:38::2;;;;;;;;1491:1:::1;;4337:485:::0;;;;;:::o;3041:566::-;1392:44;;;;;;;;5171:25:113;;;1425:10:38;5212:18:113;;;5205:83;3171:10:38;;1392:6;:20;;;;;5144:18:113;;1392:44:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1387:98;;1445:40;;;;;;;;;;;;;;1387:98;1572:39:::1;::::0;;;;::::1;::::0;::::1;5171:25:113::0;;;1572:20:38::1;5232:55:113::0;;;5212:18;;;5205:83;3199:10:38;;3211:7;;1572:6:::1;:20;::::0;::::1;::::0;5144:18:113;;1572:39:38::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1567:91;;1620:38;;;;;;;;;;;;;;1567:91;3231:19:::2;::::0;::::2;;::::0;;;:10:::2;:19;::::0;;;;:40:::2;::::0;3260:10:::2;3231:28;:40::i;:::-;3226:97;;3280:43;;;;;;;;;;;;;;3226:97;3333:18;::::0;;::::2;:9;:18:::0;;;::::2;::::0;;;;;;;:26;;::::2;::::0;;;;;;;:36;-1:-1:-1;3329:88:38::2;;;3378:39;;;;;;;;;;;;;;3329:88;3424:23;::::0;;::::2;;::::0;;;:14:::2;:23;::::0;;;;;;;:31;;::::2;::::0;;;;;;;;:43;;;;;;;;:54;;3471:7;;3424:23;:54:::2;::::0;3471:7;;3424:54:::2;:::i;:::-;::::0;;;-1:-1:-1;;3503:18:38::2;::::0;;::::2;:9;:18:::0;;;::::2;::::0;;;;;;;:26;;::::2;::::0;;;;;;;;;;:37;;;;::::2;::::0;;3558:44;;1294:25:113;;;3565:10:38;;3558:44:::2;::::0;1267:18:113;3558:44:38::2;1148:177:113::0;2384:614:38;1392:44;;;;;;;;5171:25:113;;;1425:10:38;5212:18:113;;;5205:83;2535:10:38;;1392:6;:20;;;;;5144:18:113;;1392:44:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1387:98;;1445:40;;;;;;;;;;;;;;1387:98;1572:39:::1;::::0;;;;::::1;::::0;::::1;5171:25:113::0;;;1572:20:38::1;5232:55:113::0;;;5212:18;;;5205:83;2563:10:38;;2575:6;;1572::::1;:20;::::0;::::1;::::0;5144:18:113;;1572:39:38::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1567:91;;1620:38;;;;;;;;;;;;;;1567:91;1572:39:::2;::::0;;;;::::2;::::0;::::2;5171:25:113::0;;;1572:20:38::2;5232:55:113::0;;;5212:18;;;5205:83;2599:10:38;;2611:9;;1572:6:::2;:20;::::0;::::2;::::0;5144:18:113;;1572:39:38::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1567:91;;1620:38;;;;;;;;;;;;;;1567:91;2632:22:::3;::::0;;::::3;;::::0;;;:14:::3;:22;::::0;;;;;;;:30;;::::3;::::0;;;;;;;;:42;;;;;;;:52;-1:-1:-1;2628:119:38::3;;;2701:39;;;;;;;;;;;;;;2628:119;2753:20;::::0;;::::3;:9;:20:::0;;;::::3;::::0;;;;;;;:28;;::::3;::::0;;;;;;;;:39;;2785:7;;2753:9;:39:::3;::::0;2785:7;;2753:39:::3;:::i;:::-;::::0;;;-1:-1:-1;;2817:22:38::3;::::0;;::::3;;::::0;;;:14:::3;:22;::::0;;;;;;;:30;;::::3;::::0;;;;;;;:42;;;;;;;;;;:53;;;;::::3;::::0;;2888:105;2817:22;;2888:105;::::3;::::0;2848:10;;2888:105:::3;::::0;::::3;::::0;2840:6;;2863:7;;5800:42:113;5788:55;;;;5770:74;;5875:2;5860:18;;5853:34;5758:2;5743:18;;5581:312;2888:105:38::3;;;;;;;;1664:1:::2;;1491::::1;;2384:614:::0;;;;;;:::o;1979:362::-;2073:10;2044:16;2063:21;;;;;;;;;;;;:29;;;;;;;;;;2103:18;;;2099:70;;;2130:39;;;;;;;;;;;;;;2099:70;2204:10;2194:9;:21;;;;;;;;;;;;:29;;;;;;;;;;:40;;;;;;;2247;;2227:7;2247:19;:40::i;:::-;2299:37;;1294:25:113;;;2299:37:38;;;;2308:10;;2299:37;;1282:2:113;1267:18;2299:37:38;;;;;;;2038:303;1979:362;;:::o;8305:150:18:-;8375:4;8398:50;8403:3;8423:23;;;8398:4;:50::i;:::-;8391:57;8305:150;-1:-1:-1;;;8305:150:18:o;1355:203:13:-;1482:68;;6110:42:113;6179:15;;;1482:68:13;;;6161:34:113;6231:15;;6211:18;;;6204:43;6263:18;;;6256:34;;;1455:96:13;;1475:5;;1505:27;;6073:18:113;;1482:68:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1455:19;:96::i;:::-;1355:203;;;;:::o;8860:165:18:-;8993:23;;;8940:4;4351:19;;;:12;;;:19;;;;;;:24;;8963:55;4255:127;10259:300;10322:16;10350:22;10375:19;10383:3;10375:7;:19::i;8623:156::-;8696:4;8719:53;8727:3;8747:23;;;8719:7;:53::i;941:175:13:-;1050:58;;5800:42:113;5788:55;;1050:58:13;;;5770:74:113;5860:18;;;5853:34;;;1023:86:13;;1043:5;;1073:23;;5743:18:113;;1050:58:13;5581:312:113;1023:86:13;941:175;;;:::o;2214:404:18:-;2277:4;4351:19;;;:12;;;:19;;;;;;2293:319;;-1:-1:-1;2335:23:18;;;;;;;;:11;:23;;;;;;;;;;;;;2515:18;;2493:19;;;:12;;;:19;;;;;;:40;;;;2547:11;;2293:319;-1:-1:-1;2596:5:18;2589:12;;5196:642:13;5615:23;5641:69;5669:4;5641:69;;;;;;;;;;;;;;;;;5649:5;5641:27;;;;:69;;;;;:::i;:::-;5615:95;;5728:10;:17;5749:1;5728:22;:56;;;;5765:10;5754:30;;;;;;;;;;;;:::i;:::-;5720:111;;;;;;;6805:2:113;5720:111:13;;;6787:21:113;6844:2;6824:18;;;6817:30;6883:34;6863:18;;;6856:62;6954:12;6934:18;;;6927:40;6984:19;;5720:111:13;;;;;;;;5570:109:18;5626:16;5661:3;:11;;5654:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5570:109;;;:::o;2786:1388::-;2852:4;2989:19;;;:12;;;:19;;;;;;3023:15;;3019:1149;;3392:21;3416:14;3429:1;3416:10;:14;:::i;:::-;3464:18;;3392:38;;-1:-1:-1;3444:17:18;;3464:22;;3485:1;;3464:22;:::i;:::-;3444:42;;3518:13;3505:9;:26;3501:398;;3551:17;3571:3;:11;;3583:9;3571:22;;;;;;;;:::i;:::-;;;;;;;;;3551:42;;3722:9;3693:3;:11;;3705:13;3693:26;;;;;;;;:::i;:::-;;;;;;;;;;;;:38;;;;3805:23;;;:12;;;:23;;;;;:36;;;3501:398;3977:17;;:3;;:17;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;4069:3;:12;;:19;4082:5;4069:19;;;;;;;;;;;4062:26;;;4110:4;4103:11;;;;;;;3019:1149;4152:5;4145:12;;;;;4108:223:14;4241:12;4272:52;4294:6;4302:4;4308:1;4311:12;4272:21;:52::i;:::-;4265:59;4108:223;-1:-1:-1;;;;4108:223:14:o;5165:446::-;5330:12;5387:5;5362:21;:30;;5354:81;;;;;;;7727:2:113;5354:81:14;;;7709:21:113;7766:2;7746:18;;;7739:30;7805:34;7785:18;;;7778:62;7876:8;7856:18;;;7849:36;7902:19;;5354:81:14;7525:402:113;5354:81:14;5446:12;5460:23;5487:6;:11;;5506:5;5513:4;5487:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5445:73;;;;5535:69;5562:6;5570:7;5579:10;5591:12;5535:26;:69::i;:::-;5528:76;5165:446;-1:-1:-1;;;;;;;5165:446:14:o;7671:628::-;7851:12;7879:7;7875:418;;;7906:10;:17;7927:1;7906:22;7902:286;;1702:19;;;;8113:60;;;;;;;8681:2:113;8113:60:14;;;8663:21:113;8720:2;8700:18;;;8693:30;8759:31;8739:18;;;8732:59;8808:18;;8113:60:14;8479:353:113;8113:60:14;-1:-1:-1;8208:10:14;8201:17;;7875:418;8249:33;8257:10;8269:12;8980:17;;:21;8976:379;;9208:10;9202:17;9264:15;9251:10;9247:2;9243:19;9236:44;8976:379;9331:12;9324:20;;;;;;;;;;;:::i;14:154:113:-;100:42;93:5;89:54;82:5;79:65;69:93;;158:1;155;148:12;69:93;14:154;:::o;173:247::-;232:6;285:2;273:9;264:7;260:23;256:32;253:52;;;301:1;298;291:12;253:52;340:9;327:23;359:31;384:5;359:31;:::i;672:471::-;764:6;772;780;833:2;821:9;812:7;808:23;804:32;801:52;;;849:1;846;839:12;801:52;888:9;875:23;907:31;932:5;907:31;:::i;:::-;957:5;-1:-1:-1;1014:2:113;999:18;;986:32;1027:33;986:32;1027:33;:::i;:::-;672:471;;1079:7;;-1:-1:-1;;;1133:2:113;1118:18;;;;1105:32;;672:471::o;1330:330::-;1413:6;1421;1474:2;1462:9;1453:7;1449:23;1445:32;1442:52;;;1490:1;1487;1480:12;1442:52;1529:9;1516:23;1548:31;1573:5;1548:31;:::i;:::-;1598:5;1650:2;1635:18;;;;1622:32;;-1:-1:-1;;;1330:330:113:o;1665:682::-;1775:6;1783;1791;1799;1807;1860:3;1848:9;1839:7;1835:23;1831:33;1828:53;;;1877:1;1874;1867:12;1828:53;1916:9;1903:23;1935:31;1960:5;1935:31;:::i;:::-;1985:5;-1:-1:-1;2037:2:113;2022:18;;2009:32;;-1:-1:-1;2093:2:113;2078:18;;2065:32;2106:33;2065:32;2106:33;:::i;:::-;2158:7;-1:-1:-1;2212:2:113;2197:18;;2184:32;;-1:-1:-1;2268:3:113;2253:19;;2240:33;2282;2240;2282;:::i;:::-;2334:7;2324:17;;;1665:682;;;;;;;;:::o;2352:681::-;2523:2;2575:21;;;2645:13;;2548:18;;;2667:22;;;2494:4;;2523:2;2746:15;;;;2720:2;2705:18;;;2494:4;2789:218;2803:6;2800:1;2797:13;2789:218;;;2868:13;;2883:42;2864:62;2852:75;;2982:15;;;;2947:12;;;;2825:1;2818:9;2789:218;;;-1:-1:-1;3024:3:113;;2352:681;-1:-1:-1;;;;;;2352:681:113:o;3038:540::-;3139:6;3147;3155;3163;3216:3;3204:9;3195:7;3191:23;3187:33;3184:53;;;3233:1;3230;3223:12;3184:53;3272:9;3259:23;3291:31;3316:5;3291:31;:::i;:::-;3341:5;-1:-1:-1;3393:2:113;3378:18;;3365:32;;-1:-1:-1;3449:2:113;3434:18;;3421:32;3462:33;3421:32;3462:33;:::i;:::-;3038:540;;;;-1:-1:-1;3514:7:113;;3568:2;3553:18;3540:32;;-1:-1:-1;;3038:540:113:o;3583:682::-;3693:6;3701;3709;3717;3725;3778:3;3766:9;3757:7;3753:23;3749:33;3746:53;;;3795:1;3792;3785:12;3746:53;3831:9;3818:23;3808:33;;3891:2;3880:9;3876:18;3863:32;3904:31;3929:5;3904:31;:::i;:::-;3954:5;-1:-1:-1;4011:2:113;3996:18;;3983:32;4024:33;3983:32;4024:33;:::i;:::-;4076:7;-1:-1:-1;4135:2:113;4120:18;;4107:32;4148:33;4107:32;4148:33;:::i;:::-;3583:682;;;;-1:-1:-1;3583:682:113;;4254:3;4239:19;4226:33;;3583:682;-1:-1:-1;;3583:682:113:o;4270:403::-;4353:6;4361;4414:2;4402:9;4393:7;4389:23;4385:32;4382:52;;;4430:1;4427;4420:12;4382:52;4469:9;4456:23;4488:31;4513:5;4488:31;:::i;:::-;4538:5;-1:-1:-1;4595:2:113;4580:18;;4567:32;4608:33;4567:32;4608:33;:::i;:::-;4660:7;4650:17;;;4270:403;;;;;:::o;4678:184::-;4730:77;4727:1;4720:88;4827:4;4824:1;4817:15;4851:4;4848:1;4841:15;4867:125;4932:9;;;4953:10;;;4950:36;;;4966:18;;:::i;5299:277::-;5366:6;5419:2;5407:9;5398:7;5394:23;5390:32;5387:52;;;5435:1;5432;5425:12;5387:52;5467:9;5461:16;5520:5;5513:13;5506:21;5499:5;5496:32;5486:60;;5542:1;5539;5532:12;7014:128;7081:9;;;7102:11;;;7099:37;;;7116:18;;:::i;7147:184::-;7199:77;7196:1;7189:88;7296:4;7293:1;7286:15;7320:4;7317:1;7310:15;7336:184;7388:77;7385:1;7378:88;7485:4;7482:1;7475:15;7509:4;7506:1;7499:15;7932:250;8017:1;8027:113;8041:6;8038:1;8035:13;8027:113;;;8117:11;;;8111:18;8098:11;;;8091:39;8063:2;8056:10;8027:113;;;-1:-1:-1;;8174:1:113;8156:16;;8149:27;7932:250::o;8187:287::-;8316:3;8354:6;8348:13;8370:66;8429:6;8424:3;8417:4;8409:6;8405:17;8370:66;:::i;:::-;8452:16;;;;;8187:287;-1:-1:-1;;8187:287:113:o;8837:455::-;8986:2;8975:9;8968:21;8949:4;9018:6;9012:13;9061:6;9056:2;9045:9;9041:18;9034:34;9077:79;9149:6;9144:2;9133:9;9129:18;9124:2;9116:6;9112:15;9077:79;:::i;:::-;9208:2;9196:15;9213:66;9192:88;9177:104;;;;9283:2;9173:113;;8837:455;-1:-1:-1;;8837:455:113:o",
    "linkReferences": {},
    "immutableReferences": {
      "34929": [
        {
          "start": 243,
          "length": 32
        },
        {
          "start": 853,
          "length": 32
        },
        {
          "start": 1115,
          "length": 32
        },
        {
          "start": 1871,
          "length": 32
        },
        {
          "start": 2133,
          "length": 32
        },
        {
          "start": 2665,
          "length": 32
        },
        {
          "start": 2927,
          "length": 32
        },
        {
          "start": 3537,
          "length": 32
        },
        {
          "start": 3799,
          "length": 32
        },
        {
          "start": 4040,
          "length": 32
        }
      ]
    }
  },
  "methodIdentifiers": {
    "ORACLE()": "38013f02",
    "approveModule(address)": "17825ef3",
    "balanceOf(address,address)": "f7888aec",
    "bond(address,bytes32,address,uint256)": "bba9f26f",
    "bond(address,bytes32,address,uint256,address)": "4aa90d16",
    "bondedAmountOf(address,address,bytes32)": "3c802fc5",
    "deposit(address,uint256)": "47e7ef24",
    "pay(bytes32,address,address,address,uint256)": "cab0e418",
    "release(address,bytes32,address,uint256)": "a6d09dc8",
    "revokeModule(address)": "a69748b8",
    "userApprovedModules(address)": "96fa9e10",
    "withdraw(address,uint256)": "f3fef3a3"
  },
  "rawMetadata": "{\"compiler\":{\"version\":\"0.8.19+commit.7dd6d404\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IOracle\",\"name\":\"_oracle\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"AccountingExtension_InsufficientAllowance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AccountingExtension_InsufficientFunds\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AccountingExtension_UnauthorizedModule\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AccountingExtension_UnauthorizedUser\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"_requestId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_bonder\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"_token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Bonded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_depositor\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"_token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Deposited\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"_requestId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_beneficiary\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_payer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"contract IERC20\",\"name\":\"_token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Paid\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"_requestId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_beneficiary\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"_token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Released\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_withdrawer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"_token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Withdrew\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ORACLE\",\"outputs\":[{\"internalType\":\"contract IOracle\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_module\",\"type\":\"address\"}],\"name\":\"approveModule\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_bonder\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"_token\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_balance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_bonder\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_requestId\",\"type\":\"bytes32\"},{\"internalType\":\"contract IERC20\",\"name\":\"_token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"}],\"name\":\"bond\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_bonder\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_requestId\",\"type\":\"bytes32\"},{\"internalType\":\"contract IERC20\",\"name\":\"_token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"bond\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_bonder\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"_token\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_requestId\",\"type\":\"bytes32\"}],\"name\":\"bondedAmountOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"_token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"deposit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_requestId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"_payer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"_token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"pay\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_bonder\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_requestId\",\"type\":\"bytes32\"},{\"internalType\":\"contract IERC20\",\"name\":\"_token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"release\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_module\",\"type\":\"address\"}],\"name\":\"revokeModule\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_user\",\"type\":\"address\"}],\"name\":\"userApprovedModules\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"_approvedModules\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"_token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"events\":{\"Bonded(bytes32,address,address,uint256)\":{\"params\":{\"_amount\":\"The amount of `_token` bonded\",\"_bonder\":\"The user who is getting its tokens bonded\",\"_token\":\"The address of the token being bonded\"}},\"Deposited(address,address,uint256)\":{\"params\":{\"_amount\":\"The amount of `_token` deposited\",\"_depositor\":\"The user who deposited the tokens\",\"_token\":\"The address of the token deposited by the user\"}},\"Paid(bytes32,address,address,address,uint256)\":{\"params\":{\"_amount\":\"The amount of `_token` transferred\",\"_beneficiary\":\"The user receiving the tokens\",\"_payer\":\"The user who is getting its tokens transferred\",\"_token\":\"The address of the token being transferred\"}},\"Released(bytes32,address,address,uint256)\":{\"params\":{\"_amount\":\"The amount of `_token` released\",\"_beneficiary\":\"The user who is getting its tokens released\",\"_token\":\"The address of the token being released\"}},\"Withdrew(address,address,uint256)\":{\"params\":{\"_amount\":\"The amount of `_token` withdrawn\",\"_token\":\"The address of the token withdrawn by the user\",\"_withdrawer\":\"The user who withdrew the tokens\"}}},\"kind\":\"dev\",\"methods\":{\"approveModule(address)\":{\"params\":{\"_module\":\"The address of the module to be approved\"}},\"bond(address,bytes32,address,uint256)\":{\"params\":{\"_amount\":\"The amount of `_token` to bond\",\"_bonder\":\"The address of the user to bond tokens for\",\"_requestId\":\"The id of the request the user is bonding for\",\"_token\":\"The address of the token being bonded\"}},\"bond(address,bytes32,address,uint256,address)\":{\"params\":{\"_amount\":\"The amount of `_token` to bond\",\"_bonder\":\"The address of the user to bond tokens for\",\"_requestId\":\"The id of the request the user is bonding for\",\"_sender\":\"The address starting the propose call on the Oracle\",\"_token\":\"The address of the token being bonded\"}},\"deposit(address,uint256)\":{\"details\":\"The user must have approved the accounting extension to transfer the tokens.\",\"params\":{\"_amount\":\"The amount of `_token` to deposit\",\"_token\":\"The address of the token being deposited\"}},\"pay(bytes32,address,address,address,uint256)\":{\"details\":\"Only the virtual balances in the accounting extension are modified. The token contract is not called nor its balances modified.\",\"params\":{\"_amount\":\"The amount of `_token` being transferred\",\"_payer\":\"The address of the user paying the tokens\",\"_receiver\":\"The address of the user receiving the tokens\",\"_requestId\":\"The id of the request handling the user's tokens\",\"_token\":\"The address of the token being transferred\"}},\"release(address,bytes32,address,uint256)\":{\"params\":{\"_amount\":\"The amount of `_token` to release\",\"_bonder\":\"The address of the user to release tokens for\",\"_requestId\":\"The id of the request where the tokens were bonded\",\"_token\":\"The address of the token being released\"}},\"revokeModule(address)\":{\"params\":{\"_module\":\"The address of the module to be revoked\"}},\"userApprovedModules(address)\":{\"params\":{\"_user\":\"The address of the user\"},\"returns\":{\"_approvedModules\":\"The array of all modules approved by the user\"}},\"withdraw(address,uint256)\":{\"params\":{\"_amount\":\"The amount of `_token` to withdraw\",\"_token\":\"The address of the token being withdrawn\"}}},\"stateVariables\":{\"balanceOf\":{\"params\":{\"_token\":\"The token deposited\",\"_user\":\"The address of the user with deposited tokens\"},\"return\":\"_balance The amount of `_token` deposited\",\"returns\":{\"_balance\":\"The amount of `_token` deposited\"}},\"bondedAmountOf\":{\"params\":{\"_bondToken\":\"The token bonded\",\"_requestId\":\"The id of the request the user bonded for\",\"_user\":\"The address of the user with bonded tokens\"},\"return\":\"_amount The amount of `_bondToken` bonded\",\"returns\":{\"_amount\":\"The amount of `_bondToken` bonded\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"AccountingExtension_InsufficientAllowance()\":[{\"notice\":\"Thrown when the module bonding user tokens hasn't been approved by the user.\"}],\"AccountingExtension_InsufficientFunds()\":[{\"notice\":\"Thrown when the account doesn't have enough balance to bond/withdraw or not enough bonded to release/pay\"}],\"AccountingExtension_UnauthorizedModule()\":[{\"notice\":\"Thrown when an `onlyAllowedModule` function is called by something else than a module being used in the corresponding request\"}],\"AccountingExtension_UnauthorizedUser()\":[{\"notice\":\"Thrown when an `onlyParticipant` function is called with an address that is not part of the request.\"}]},\"events\":{\"Bonded(bytes32,address,address,uint256)\":{\"notice\":\"User's funds have been bonded\"},\"Deposited(address,address,uint256)\":{\"notice\":\"A user deposited tokens into the accounting extension\"},\"Paid(bytes32,address,address,address,uint256)\":{\"notice\":\"A payment between users has been made\"},\"Released(bytes32,address,address,uint256)\":{\"notice\":\"User's funds have been released\"},\"Withdrew(address,address,uint256)\":{\"notice\":\"A user withdrew tokens from the accounting extension\"}},\"kind\":\"user\",\"methods\":{\"ORACLE()\":{\"notice\":\"Returns the interface for the Oracle contract\"},\"approveModule(address)\":{\"notice\":\"Allows a user to approve a module for bonding tokens\"},\"balanceOf(address,address)\":{\"notice\":\"Returns the amount of a token a user has deposited\"},\"bond(address,bytes32,address,uint256)\":{\"notice\":\"Allows a allowed module to bond a user's tokens for a request\"},\"bond(address,bytes32,address,uint256,address)\":{\"notice\":\"Allows a valid module to bond a user's tokens for a request\"},\"bondedAmountOf(address,address,bytes32)\":{\"notice\":\"Returns the amount of a token a user has bonded\"},\"deposit(address,uint256)\":{\"notice\":\"Transfers tokens from a user and updates his virtual balance\"},\"pay(bytes32,address,address,address,uint256)\":{\"notice\":\"Allows a allowed module to transfer bonded tokens from one user to another\"},\"release(address,bytes32,address,uint256)\":{\"notice\":\"Allows a valid module to release a user's tokens\"},\"revokeModule(address)\":{\"notice\":\"Allows a user to revoke a module's approval for bonding tokens\"},\"userApprovedModules(address)\":{\"notice\":\"Returns a list of all modules a user has approved\"},\"withdraw(address,uint256)\":{\"notice\":\"Allows an user to withdraw deposited tokens\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solidity/contracts/extensions/AccountingExtension.sol\":\"AccountingExtension\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[\":@defi-wonderland/=node_modules/@defi-wonderland/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/ds-test/src/\",\":forge-std/=node_modules/forge-std/src/\",\":solmate/=node_modules/solmate/src/\"]},\"sources\":{\"node_modules/@defi-wonderland/prophet-core-contracts/solidity/interfaces/IModule.sol\":{\"keccak256\":\"0x72c2f68e8c2b749d9ae745269c706b137a640d6bd6f65f966238b547d61e3a05\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4edb1aae7c4abd875d2da44a2dd83781c3c0a3d059edf2d1f2be1c44f865456f\",\"dweb:/ipfs/QmbEHy8tENha1ANEEZADpH4THmqC8aHyCXxFYPw4tS5mf4\"]},\"node_modules/@defi-wonderland/prophet-core-contracts/solidity/interfaces/IOracle.sol\":{\"keccak256\":\"0x606262b4bb3b1447b1f6afef8a1b49088956b168a4b066f6f60da4712b95d3cf\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a763cdb6ba9f12a93e3d5238d6d3235c5c0c229df94793927f9d2abe00542823\",\"dweb:/ipfs/QmbAbfVyCiHvNvhHxc5r8tK5GUuVBATo15Ma5MirhZPtE6\"]},\"node_modules/@defi-wonderland/prophet-core-contracts/solidity/interfaces/modules/dispute/IDisputeModule.sol\":{\"keccak256\":\"0x21707db43d55ba040893ef0ffefa7f9740c6e03b94d750637e6b2c047a16baa4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ae582ca2fdd6fc82c650333066c95a917221282ad7ef15ea62fb4a31e4ed864d\",\"dweb:/ipfs/QmdxvkpNCK46uYv31TxAtxCiRPSoxbT4hrs94WQfR4ctTM\"]},\"node_modules/@defi-wonderland/prophet-core-contracts/solidity/interfaces/modules/finality/IFinalityModule.sol\":{\"keccak256\":\"0xf6f465732ee119879e3317227f9cf6468055f4f98acdb4365f5b4eacda32948e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://82e1928a7bbc5bce95e1b83d917e1470c72a0bec7494f6f42471b21c0f2b641e\",\"dweb:/ipfs/QmSjaBsNhzCfQd5xwZa98LNYSZ1TqAqo6inRTGD31ua4L8\"]},\"node_modules/@defi-wonderland/prophet-core-contracts/solidity/interfaces/modules/request/IRequestModule.sol\":{\"keccak256\":\"0xefa5dd3334a1676cca1c1860c66c16adb1e399917742476d15de8737b5cb0032\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://03bcff0500f4054b5f71b0badd1779f8dfaa7fc74fc64788991438a1d9d2d14d\",\"dweb:/ipfs/QmdDjbGPgBfbbyT26Xtt9uBD7nYnhSK43fa9skfuBrfjCc\"]},\"node_modules/@defi-wonderland/prophet-core-contracts/solidity/interfaces/modules/resolution/IResolutionModule.sol\":{\"keccak256\":\"0x36e75a87661b234be605a7455c88eaf4e7cbc9f5b4ea08133dd6d9d5af8d6bc6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://232536c4e8b2e9114035e57360976ff24931459fb22a026114d392d3e315ea67\",\"dweb:/ipfs/QmPYKU5RDGMqTZZzCCvVy7ssush4EQGgCCbzbeGpnejGno\"]},\"node_modules/@defi-wonderland/prophet-core-contracts/solidity/interfaces/modules/response/IResponseModule.sol\":{\"keccak256\":\"0xd0610065a22a8d3323427d871a73b835e4d0dffb3afe4bb7e8bbee81b8b9ed1b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8c72dcbd36f11e87fc21c922684e5524f0c83830dc945ac92614ea1cd770a1bf\",\"dweb:/ipfs/QmfYnQfSDd2jS9QEAdpmDF6wVXWqitQpmJsSeEHs1mtUQP\"]},\"node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x287b55befed2961a7eabd7d7b1b2839cbca8a5b80ef8dcbb25ed3d4c2002c305\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bd39944e8fc06be6dbe2dd1d8449b5336e23c6a7ba3e8e9ae5ae0f37f35283f5\",\"dweb:/ipfs/QmPV3FGYjVwvKSgAXKUN3r9T9GwniZz83CxBpM7vyj2G53\"]},\"node_modules/@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol\":{\"keccak256\":\"0xec63854014a5b4f2b3290ab9103a21bdf902a508d0f41a8573fea49e98bf571a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bc5b5dc12fbc4002f282eaa7a5f06d8310ed62c1c77c5770f6283e058454c39a\",\"dweb:/ipfs/Qme9rE2wS3yBuyJq9GgbmzbsBQsW2M2sVFqYYLw7bosGrv\"]},\"node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0xabefac93435967b4d36a4fabcbdbb918d1f0b7ae3c3d85bc30923b326c927ed1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9d213d3befca47da33f6db0310826bcdb148299805c10d77175ecfe1d06a9a68\",\"dweb:/ipfs/QmRgCn6SP1hbBkExUADFuDo8xkT4UU47yjNF5FhCeRbQmS\"]},\"node_modules/@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0x006dd67219697fe68d7fbfdea512e7c4cb64a43565ed86171d67e844982da6fa\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2455248c8ddd9cc6a7af76a13973cddf222072427e7b0e2a7d1aff345145e931\",\"dweb:/ipfs/QmfYjnjRbWqYpuxurqveE6HtzsY1Xx323J428AKQgtBJZm\"]},\"node_modules/@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":{\"keccak256\":\"0x9f4357008a8f7d8c8bf5d48902e789637538d8c016be5766610901b4bba81514\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://20bf19b2b851f58a4c24543de80ae70b3e08621f9230eb335dc75e2d4f43f5df\",\"dweb:/ipfs/QmSYuH1AhvJkPK8hNvoPqtExBcgTB42pPRHgTHkS5c5zYW\"]},\"solidity/contracts/extensions/AccountingExtension.sol\":{\"keccak256\":\"0x26b74aa4bf4bd221da169e960932e5894376e964f7bc7d9eb19660142015958a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://81279015c35af771cbb182db9e7c4a4b69410525f191c38512d9cba621feb302\",\"dweb:/ipfs/QmWrLiRhuyjAEq8pmUVQzbfiuai1Fy4frNvuLPBBQ55E4j\"]},\"solidity/interfaces/extensions/IAccountingExtension.sol\":{\"keccak256\":\"0x31b990f92e67ce2b480ca97fcc54d44dddaa82fa60259439d8556bfbb7963d0e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://23e6ef2026bf40ef58f625b7377c70e4988902ae14df333e9be35129a57a87f0\",\"dweb:/ipfs/QmW1RfXvujkVHqXazdeTKshba9rX6kzSCRfZKBwLi38Ue5\"]}},\"version\":1}",
  "metadata": {
    "compiler": {
      "version": "0.8.19+commit.7dd6d404"
    },
    "language": "Solidity",
    "output": {
      "abi": [
        {
          "inputs": [
            {
              "internalType": "contract IOracle",
              "name": "_oracle",
              "type": "address"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "constructor"
        },
        {
          "inputs": [],
          "type": "error",
          "name": "AccountingExtension_InsufficientAllowance"
        },
        {
          "inputs": [],
          "type": "error",
          "name": "AccountingExtension_InsufficientFunds"
        },
        {
          "inputs": [],
          "type": "error",
          "name": "AccountingExtension_UnauthorizedModule"
        },
        {
          "inputs": [],
          "type": "error",
          "name": "AccountingExtension_UnauthorizedUser"
        },
        {
          "inputs": [
            {
              "internalType": "bytes32",
              "name": "_requestId",
              "type": "bytes32",
              "indexed": true
            },
            {
              "internalType": "address",
              "name": "_bonder",
              "type": "address",
              "indexed": true
            },
            {
              "internalType": "contract IERC20",
              "name": "_token",
              "type": "address",
              "indexed": true
            },
            {
              "internalType": "uint256",
              "name": "_amount",
              "type": "uint256",
              "indexed": false
            }
          ],
          "type": "event",
          "name": "Bonded",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "_depositor",
              "type": "address",
              "indexed": true
            },
            {
              "internalType": "contract IERC20",
              "name": "_token",
              "type": "address",
              "indexed": true
            },
            {
              "internalType": "uint256",
              "name": "_amount",
              "type": "uint256",
              "indexed": false
            }
          ],
          "type": "event",
          "name": "Deposited",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "bytes32",
              "name": "_requestId",
              "type": "bytes32",
              "indexed": true
            },
            {
              "internalType": "address",
              "name": "_beneficiary",
              "type": "address",
              "indexed": true
            },
            {
              "internalType": "address",
              "name": "_payer",
              "type": "address",
              "indexed": true
            },
            {
              "internalType": "contract IERC20",
              "name": "_token",
              "type": "address",
              "indexed": false
            },
            {
              "internalType": "uint256",
              "name": "_amount",
              "type": "uint256",
              "indexed": false
            }
          ],
          "type": "event",
          "name": "Paid",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "bytes32",
              "name": "_requestId",
              "type": "bytes32",
              "indexed": true
            },
            {
              "internalType": "address",
              "name": "_beneficiary",
              "type": "address",
              "indexed": true
            },
            {
              "internalType": "contract IERC20",
              "name": "_token",
              "type": "address",
              "indexed": true
            },
            {
              "internalType": "uint256",
              "name": "_amount",
              "type": "uint256",
              "indexed": false
            }
          ],
          "type": "event",
          "name": "Released",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "_withdrawer",
              "type": "address",
              "indexed": true
            },
            {
              "internalType": "contract IERC20",
              "name": "_token",
              "type": "address",
              "indexed": true
            },
            {
              "internalType": "uint256",
              "name": "_amount",
              "type": "uint256",
              "indexed": false
            }
          ],
          "type": "event",
          "name": "Withdrew",
          "anonymous": false
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "ORACLE",
          "outputs": [
            {
              "internalType": "contract IOracle",
              "name": "",
              "type": "address"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "_module",
              "type": "address"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "approveModule"
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "_bonder",
              "type": "address"
            },
            {
              "internalType": "contract IERC20",
              "name": "_token",
              "type": "address"
            }
          ],
          "stateMutability": "view",
          "type": "function",
          "name": "balanceOf",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "_balance",
              "type": "uint256"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "_bonder",
              "type": "address"
            },
            {
              "internalType": "bytes32",
              "name": "_requestId",
              "type": "bytes32"
            },
            {
              "internalType": "contract IERC20",
              "name": "_token",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "_amount",
              "type": "uint256"
            },
            {
              "internalType": "address",
              "name": "_sender",
              "type": "address"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "bond"
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "_bonder",
              "type": "address"
            },
            {
              "internalType": "bytes32",
              "name": "_requestId",
              "type": "bytes32"
            },
            {
              "internalType": "contract IERC20",
              "name": "_token",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "_amount",
              "type": "uint256"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "bond"
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "_bonder",
              "type": "address"
            },
            {
              "internalType": "contract IERC20",
              "name": "_token",
              "type": "address"
            },
            {
              "internalType": "bytes32",
              "name": "_requestId",
              "type": "bytes32"
            }
          ],
          "stateMutability": "view",
          "type": "function",
          "name": "bondedAmountOf",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "_amount",
              "type": "uint256"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "contract IERC20",
              "name": "_token",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "_amount",
              "type": "uint256"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "deposit"
        },
        {
          "inputs": [
            {
              "internalType": "bytes32",
              "name": "_requestId",
              "type": "bytes32"
            },
            {
              "internalType": "address",
              "name": "_payer",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "_receiver",
              "type": "address"
            },
            {
              "internalType": "contract IERC20",
              "name": "_token",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "_amount",
              "type": "uint256"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "pay"
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "_bonder",
              "type": "address"
            },
            {
              "internalType": "bytes32",
              "name": "_requestId",
              "type": "bytes32"
            },
            {
              "internalType": "contract IERC20",
              "name": "_token",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "_amount",
              "type": "uint256"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "release"
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "_module",
              "type": "address"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "revokeModule"
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "_user",
              "type": "address"
            }
          ],
          "stateMutability": "view",
          "type": "function",
          "name": "userApprovedModules",
          "outputs": [
            {
              "internalType": "address[]",
              "name": "_approvedModules",
              "type": "address[]"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "contract IERC20",
              "name": "_token",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "_amount",
              "type": "uint256"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "withdraw"
        }
      ],
      "devdoc": {
        "kind": "dev",
        "methods": {
          "approveModule(address)": {
            "params": {
              "_module": "The address of the module to be approved"
            }
          },
          "bond(address,bytes32,address,uint256)": {
            "params": {
              "_amount": "The amount of `_token` to bond",
              "_bonder": "The address of the user to bond tokens for",
              "_requestId": "The id of the request the user is bonding for",
              "_token": "The address of the token being bonded"
            }
          },
          "bond(address,bytes32,address,uint256,address)": {
            "params": {
              "_amount": "The amount of `_token` to bond",
              "_bonder": "The address of the user to bond tokens for",
              "_requestId": "The id of the request the user is bonding for",
              "_sender": "The address starting the propose call on the Oracle",
              "_token": "The address of the token being bonded"
            }
          },
          "deposit(address,uint256)": {
            "details": "The user must have approved the accounting extension to transfer the tokens.",
            "params": {
              "_amount": "The amount of `_token` to deposit",
              "_token": "The address of the token being deposited"
            }
          },
          "pay(bytes32,address,address,address,uint256)": {
            "details": "Only the virtual balances in the accounting extension are modified. The token contract is not called nor its balances modified.",
            "params": {
              "_amount": "The amount of `_token` being transferred",
              "_payer": "The address of the user paying the tokens",
              "_receiver": "The address of the user receiving the tokens",
              "_requestId": "The id of the request handling the user's tokens",
              "_token": "The address of the token being transferred"
            }
          },
          "release(address,bytes32,address,uint256)": {
            "params": {
              "_amount": "The amount of `_token` to release",
              "_bonder": "The address of the user to release tokens for",
              "_requestId": "The id of the request where the tokens were bonded",
              "_token": "The address of the token being released"
            }
          },
          "revokeModule(address)": {
            "params": {
              "_module": "The address of the module to be revoked"
            }
          },
          "userApprovedModules(address)": {
            "params": {
              "_user": "The address of the user"
            },
            "returns": {
              "_approvedModules": "The array of all modules approved by the user"
            }
          },
          "withdraw(address,uint256)": {
            "params": {
              "_amount": "The amount of `_token` to withdraw",
              "_token": "The address of the token being withdrawn"
            }
          }
        },
        "version": 1
      },
      "userdoc": {
        "kind": "user",
        "methods": {
          "ORACLE()": {
            "notice": "Returns the interface for the Oracle contract"
          },
          "approveModule(address)": {
            "notice": "Allows a user to approve a module for bonding tokens"
          },
          "balanceOf(address,address)": {
            "notice": "Returns the amount of a token a user has deposited"
          },
          "bond(address,bytes32,address,uint256)": {
            "notice": "Allows a allowed module to bond a user's tokens for a request"
          },
          "bond(address,bytes32,address,uint256,address)": {
            "notice": "Allows a valid module to bond a user's tokens for a request"
          },
          "bondedAmountOf(address,address,bytes32)": {
            "notice": "Returns the amount of a token a user has bonded"
          },
          "deposit(address,uint256)": {
            "notice": "Transfers tokens from a user and updates his virtual balance"
          },
          "pay(bytes32,address,address,address,uint256)": {
            "notice": "Allows a allowed module to transfer bonded tokens from one user to another"
          },
          "release(address,bytes32,address,uint256)": {
            "notice": "Allows a valid module to release a user's tokens"
          },
          "revokeModule(address)": {
            "notice": "Allows a user to revoke a module's approval for bonding tokens"
          },
          "userApprovedModules(address)": {
            "notice": "Returns a list of all modules a user has approved"
          },
          "withdraw(address,uint256)": {
            "notice": "Allows an user to withdraw deposited tokens"
          }
        },
        "version": 1
      }
    },
    "settings": {
      "remappings": [
        "@defi-wonderland/=node_modules/@defi-wonderland/",
        "@openzeppelin/=node_modules/@openzeppelin/",
        "ds-test/=node_modules/ds-test/src/",
        "forge-std/=node_modules/forge-std/src/",
        "solmate/=node_modules/solmate/src/"
      ],
      "optimizer": {
        "enabled": true,
        "runs": 10000
      },
      "metadata": {
        "bytecodeHash": "ipfs"
      },
      "compilationTarget": {
        "solidity/contracts/extensions/AccountingExtension.sol": "AccountingExtension"
      },
      "libraries": {}
    },
    "sources": {
      "node_modules/@defi-wonderland/prophet-core-contracts/solidity/interfaces/IModule.sol": {
        "keccak256": "0x72c2f68e8c2b749d9ae745269c706b137a640d6bd6f65f966238b547d61e3a05",
        "urls": [
          "bzz-raw://4edb1aae7c4abd875d2da44a2dd83781c3c0a3d059edf2d1f2be1c44f865456f",
          "dweb:/ipfs/QmbEHy8tENha1ANEEZADpH4THmqC8aHyCXxFYPw4tS5mf4"
        ],
        "license": "MIT"
      },
      "node_modules/@defi-wonderland/prophet-core-contracts/solidity/interfaces/IOracle.sol": {
        "keccak256": "0x606262b4bb3b1447b1f6afef8a1b49088956b168a4b066f6f60da4712b95d3cf",
        "urls": [
          "bzz-raw://a763cdb6ba9f12a93e3d5238d6d3235c5c0c229df94793927f9d2abe00542823",
          "dweb:/ipfs/QmbAbfVyCiHvNvhHxc5r8tK5GUuVBATo15Ma5MirhZPtE6"
        ],
        "license": "MIT"
      },
      "node_modules/@defi-wonderland/prophet-core-contracts/solidity/interfaces/modules/dispute/IDisputeModule.sol": {
        "keccak256": "0x21707db43d55ba040893ef0ffefa7f9740c6e03b94d750637e6b2c047a16baa4",
        "urls": [
          "bzz-raw://ae582ca2fdd6fc82c650333066c95a917221282ad7ef15ea62fb4a31e4ed864d",
          "dweb:/ipfs/QmdxvkpNCK46uYv31TxAtxCiRPSoxbT4hrs94WQfR4ctTM"
        ],
        "license": "MIT"
      },
      "node_modules/@defi-wonderland/prophet-core-contracts/solidity/interfaces/modules/finality/IFinalityModule.sol": {
        "keccak256": "0xf6f465732ee119879e3317227f9cf6468055f4f98acdb4365f5b4eacda32948e",
        "urls": [
          "bzz-raw://82e1928a7bbc5bce95e1b83d917e1470c72a0bec7494f6f42471b21c0f2b641e",
          "dweb:/ipfs/QmSjaBsNhzCfQd5xwZa98LNYSZ1TqAqo6inRTGD31ua4L8"
        ],
        "license": "MIT"
      },
      "node_modules/@defi-wonderland/prophet-core-contracts/solidity/interfaces/modules/request/IRequestModule.sol": {
        "keccak256": "0xefa5dd3334a1676cca1c1860c66c16adb1e399917742476d15de8737b5cb0032",
        "urls": [
          "bzz-raw://03bcff0500f4054b5f71b0badd1779f8dfaa7fc74fc64788991438a1d9d2d14d",
          "dweb:/ipfs/QmdDjbGPgBfbbyT26Xtt9uBD7nYnhSK43fa9skfuBrfjCc"
        ],
        "license": "MIT"
      },
      "node_modules/@defi-wonderland/prophet-core-contracts/solidity/interfaces/modules/resolution/IResolutionModule.sol": {
        "keccak256": "0x36e75a87661b234be605a7455c88eaf4e7cbc9f5b4ea08133dd6d9d5af8d6bc6",
        "urls": [
          "bzz-raw://232536c4e8b2e9114035e57360976ff24931459fb22a026114d392d3e315ea67",
          "dweb:/ipfs/QmPYKU5RDGMqTZZzCCvVy7ssush4EQGgCCbzbeGpnejGno"
        ],
        "license": "MIT"
      },
      "node_modules/@defi-wonderland/prophet-core-contracts/solidity/interfaces/modules/response/IResponseModule.sol": {
        "keccak256": "0xd0610065a22a8d3323427d871a73b835e4d0dffb3afe4bb7e8bbee81b8b9ed1b",
        "urls": [
          "bzz-raw://8c72dcbd36f11e87fc21c922684e5524f0c83830dc945ac92614ea1cd770a1bf",
          "dweb:/ipfs/QmfYnQfSDd2jS9QEAdpmDF6wVXWqitQpmJsSeEHs1mtUQP"
        ],
        "license": "MIT"
      },
      "node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol": {
        "keccak256": "0x287b55befed2961a7eabd7d7b1b2839cbca8a5b80ef8dcbb25ed3d4c2002c305",
        "urls": [
          "bzz-raw://bd39944e8fc06be6dbe2dd1d8449b5336e23c6a7ba3e8e9ae5ae0f37f35283f5",
          "dweb:/ipfs/QmPV3FGYjVwvKSgAXKUN3r9T9GwniZz83CxBpM7vyj2G53"
        ],
        "license": "MIT"
      },
      "node_modules/@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol": {
        "keccak256": "0xec63854014a5b4f2b3290ab9103a21bdf902a508d0f41a8573fea49e98bf571a",
        "urls": [
          "bzz-raw://bc5b5dc12fbc4002f282eaa7a5f06d8310ed62c1c77c5770f6283e058454c39a",
          "dweb:/ipfs/Qme9rE2wS3yBuyJq9GgbmzbsBQsW2M2sVFqYYLw7bosGrv"
        ],
        "license": "MIT"
      },
      "node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol": {
        "keccak256": "0xabefac93435967b4d36a4fabcbdbb918d1f0b7ae3c3d85bc30923b326c927ed1",
        "urls": [
          "bzz-raw://9d213d3befca47da33f6db0310826bcdb148299805c10d77175ecfe1d06a9a68",
          "dweb:/ipfs/QmRgCn6SP1hbBkExUADFuDo8xkT4UU47yjNF5FhCeRbQmS"
        ],
        "license": "MIT"
      },
      "node_modules/@openzeppelin/contracts/utils/Address.sol": {
        "keccak256": "0x006dd67219697fe68d7fbfdea512e7c4cb64a43565ed86171d67e844982da6fa",
        "urls": [
          "bzz-raw://2455248c8ddd9cc6a7af76a13973cddf222072427e7b0e2a7d1aff345145e931",
          "dweb:/ipfs/QmfYjnjRbWqYpuxurqveE6HtzsY1Xx323J428AKQgtBJZm"
        ],
        "license": "MIT"
      },
      "node_modules/@openzeppelin/contracts/utils/structs/EnumerableSet.sol": {
        "keccak256": "0x9f4357008a8f7d8c8bf5d48902e789637538d8c016be5766610901b4bba81514",
        "urls": [
          "bzz-raw://20bf19b2b851f58a4c24543de80ae70b3e08621f9230eb335dc75e2d4f43f5df",
          "dweb:/ipfs/QmSYuH1AhvJkPK8hNvoPqtExBcgTB42pPRHgTHkS5c5zYW"
        ],
        "license": "MIT"
      },
      "solidity/contracts/extensions/AccountingExtension.sol": {
        "keccak256": "0x26b74aa4bf4bd221da169e960932e5894376e964f7bc7d9eb19660142015958a",
        "urls": [
          "bzz-raw://81279015c35af771cbb182db9e7c4a4b69410525f191c38512d9cba621feb302",
          "dweb:/ipfs/QmWrLiRhuyjAEq8pmUVQzbfiuai1Fy4frNvuLPBBQ55E4j"
        ],
        "license": "MIT"
      },
      "solidity/interfaces/extensions/IAccountingExtension.sol": {
        "keccak256": "0x31b990f92e67ce2b480ca97fcc54d44dddaa82fa60259439d8556bfbb7963d0e",
        "urls": [
          "bzz-raw://23e6ef2026bf40ef58f625b7377c70e4988902ae14df333e9be35129a57a87f0",
          "dweb:/ipfs/QmW1RfXvujkVHqXazdeTKshba9rX6kzSCRfZKBwLi38Ue5"
        ],
        "license": "MIT"
      }
    },
    "version": 1
  },
  "ast": {
    "absolutePath": "solidity/contracts/extensions/AccountingExtension.sol",
    "id": 35418,
    "exportedSymbols": {
      "AccountingExtension": [
        35417
      ],
      "EnumerableSet": [
        5377
      ],
      "IAccountingExtension": [
        42580
      ],
      "IERC20": [
        2822
      ],
      "IOracle": [
        2282
      ],
      "SafeERC20": [
        3234
      ]
    },
    "nodeType": "SourceUnit",
    "src": "32:5272:38",
    "nodes": [
      {
        "id": 34905,
        "nodeType": "PragmaDirective",
        "src": "32:24:38",
        "nodes": [],
        "literals": [
          "solidity",
          "^",
          "0.8",
          ".19"
        ]
      },
      {
        "id": 34907,
        "nodeType": "ImportDirective",
        "src": "58:70:38",
        "nodes": [],
        "absolutePath": "node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol",
        "file": "@openzeppelin/contracts/token/ERC20/IERC20.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 35418,
        "sourceUnit": 2823,
        "symbolAliases": [
          {
            "foreign": {
              "id": 34906,
              "name": "IERC20",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 2822,
              "src": "66:6:38",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 34909,
        "nodeType": "ImportDirective",
        "src": "129:82:38",
        "nodes": [],
        "absolutePath": "node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol",
        "file": "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 35418,
        "sourceUnit": 3235,
        "symbolAliases": [
          {
            "foreign": {
              "id": 34908,
              "name": "SafeERC20",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 3234,
              "src": "137:9:38",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 34911,
        "nodeType": "ImportDirective",
        "src": "212:86:38",
        "nodes": [],
        "absolutePath": "node_modules/@openzeppelin/contracts/utils/structs/EnumerableSet.sol",
        "file": "@openzeppelin/contracts/utils/structs/EnumerableSet.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 35418,
        "sourceUnit": 5378,
        "symbolAliases": [
          {
            "foreign": {
              "id": 34910,
              "name": "EnumerableSet",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 5377,
              "src": "220:13:38",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 34913,
        "nodeType": "ImportDirective",
        "src": "299:96:38",
        "nodes": [],
        "absolutePath": "node_modules/@defi-wonderland/prophet-core-contracts/solidity/interfaces/IOracle.sol",
        "file": "@defi-wonderland/prophet-core-contracts/solidity/interfaces/IOracle.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 35418,
        "sourceUnit": 2283,
        "symbolAliases": [
          {
            "foreign": {
              "id": 34912,
              "name": "IOracle",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 2282,
              "src": "307:7:38",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 34915,
        "nodeType": "ImportDirective",
        "src": "397:90:38",
        "nodes": [],
        "absolutePath": "solidity/interfaces/extensions/IAccountingExtension.sol",
        "file": "../../interfaces/extensions/IAccountingExtension.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 35418,
        "sourceUnit": 42581,
        "symbolAliases": [
          {
            "foreign": {
              "id": 34914,
              "name": "IAccountingExtension",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 42580,
              "src": "405:20:38",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 35417,
        "nodeType": "ContractDefinition",
        "src": "489:4814:38",
        "nodes": [
          {
            "id": 34921,
            "nodeType": "UsingForDirective",
            "src": "546:27:38",
            "nodes": [],
            "global": false,
            "libraryName": {
              "id": 34918,
              "name": "SafeERC20",
              "nameLocations": [
                "552:9:38"
              ],
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 3234,
              "src": "552:9:38"
            },
            "typeName": {
              "id": 34920,
              "nodeType": "UserDefinedTypeName",
              "pathNode": {
                "id": 34919,
                "name": "IERC20",
                "nameLocations": [
                  "566:6:38"
                ],
                "nodeType": "IdentifierPath",
                "referencedDeclaration": 2822,
                "src": "566:6:38"
              },
              "referencedDeclaration": 2822,
              "src": "566:6:38",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IERC20_$2822",
                "typeString": "contract IERC20"
              }
            }
          },
          {
            "id": 34925,
            "nodeType": "UsingForDirective",
            "src": "576:49:38",
            "nodes": [],
            "global": false,
            "libraryName": {
              "id": 34922,
              "name": "EnumerableSet",
              "nameLocations": [
                "582:13:38"
              ],
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 5377,
              "src": "582:13:38"
            },
            "typeName": {
              "id": 34924,
              "nodeType": "UserDefinedTypeName",
              "pathNode": {
                "id": 34923,
                "name": "EnumerableSet.AddressSet",
                "nameLocations": [
                  "600:13:38",
                  "614:10:38"
                ],
                "nodeType": "IdentifierPath",
                "referencedDeclaration": 5090,
                "src": "600:24:38"
              },
              "referencedDeclaration": 5090,
              "src": "600:24:38",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_AddressSet_$5090_storage_ptr",
                "typeString": "struct EnumerableSet.AddressSet"
              }
            }
          },
          {
            "id": 34929,
            "nodeType": "VariableDeclaration",
            "src": "668:31:38",
            "nodes": [],
            "baseFunctions": [
              42460
            ],
            "constant": false,
            "documentation": {
              "id": 34926,
              "nodeType": "StructuredDocumentation",
              "src": "629:36:38",
              "text": "@inheritdoc IAccountingExtension"
            },
            "functionSelector": "38013f02",
            "mutability": "immutable",
            "name": "ORACLE",
            "nameLocation": "693:6:38",
            "scope": 35417,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_IOracle_$2282",
              "typeString": "contract IOracle"
            },
            "typeName": {
              "id": 34928,
              "nodeType": "UserDefinedTypeName",
              "pathNode": {
                "id": 34927,
                "name": "IOracle",
                "nameLocations": [
                  "668:7:38"
                ],
                "nodeType": "IdentifierPath",
                "referencedDeclaration": 2282,
                "src": "668:7:38"
              },
              "referencedDeclaration": 2282,
              "src": "668:7:38",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IOracle_$2282",
                "typeString": "contract IOracle"
              }
            },
            "visibility": "public"
          },
          {
            "id": 34937,
            "nodeType": "VariableDeclaration",
            "src": "743:87:38",
            "nodes": [],
            "baseFunctions": [
              42484
            ],
            "constant": false,
            "documentation": {
              "id": 34930,
              "nodeType": "StructuredDocumentation",
              "src": "704:36:38",
              "text": "@inheritdoc IAccountingExtension"
            },
            "functionSelector": "f7888aec",
            "mutability": "mutable",
            "name": "balanceOf",
            "nameLocation": "821:9:38",
            "scope": 35417,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$2822_$_t_uint256_$_$",
              "typeString": "mapping(address => mapping(contract IERC20 => uint256))"
            },
            "typeName": {
              "id": 34936,
              "keyName": "_bonder",
              "keyNameLocation": "759:7:38",
              "keyType": {
                "id": 34931,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "751:7:38",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "743:70:38",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$2822_$_t_uint256_$_$",
                "typeString": "mapping(address => mapping(contract IERC20 => uint256))"
              },
              "valueName": "",
              "valueNameLocation": "-1:-1:-1",
              "valueType": {
                "id": 34935,
                "keyName": "_token",
                "keyNameLocation": "785:6:38",
                "keyType": {
                  "id": 34933,
                  "nodeType": "UserDefinedTypeName",
                  "pathNode": {
                    "id": 34932,
                    "name": "IERC20",
                    "nameLocations": [
                      "778:6:38"
                    ],
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 2822,
                    "src": "778:6:38"
                  },
                  "referencedDeclaration": 2822,
                  "src": "778:6:38",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20_$2822",
                    "typeString": "contract IERC20"
                  }
                },
                "nodeType": "Mapping",
                "src": "770:42:38",
                "typeDescriptions": {
                  "typeIdentifier": "t_mapping$_t_contract$_IERC20_$2822_$_t_uint256_$",
                  "typeString": "mapping(contract IERC20 => uint256)"
                },
                "valueName": "_balance",
                "valueNameLocation": "803:8:38",
                "valueType": {
                  "id": 34934,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "795:7:38",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                }
              }
            },
            "visibility": "public"
          },
          {
            "id": 34947,
            "nodeType": "VariableDeclaration",
            "src": "874:126:38",
            "nodes": [],
            "baseFunctions": [
              42473
            ],
            "constant": false,
            "documentation": {
              "id": 34938,
              "nodeType": "StructuredDocumentation",
              "src": "835:36:38",
              "text": "@inheritdoc IAccountingExtension"
            },
            "functionSelector": "3c802fc5",
            "mutability": "mutable",
            "name": "bondedAmountOf",
            "nameLocation": "986:14:38",
            "scope": 35417,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$2822_$_t_mapping$_t_bytes32_$_t_uint256_$_$_$",
              "typeString": "mapping(address => mapping(contract IERC20 => mapping(bytes32 => uint256)))"
            },
            "typeName": {
              "id": 34946,
              "keyName": "_bonder",
              "keyNameLocation": "890:7:38",
              "keyType": {
                "id": 34939,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "882:7:38",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "874:100:38",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$2822_$_t_mapping$_t_bytes32_$_t_uint256_$_$_$",
                "typeString": "mapping(address => mapping(contract IERC20 => mapping(bytes32 => uint256)))"
              },
              "valueName": "",
              "valueNameLocation": "-1:-1:-1",
              "valueType": {
                "id": 34945,
                "keyName": "_token",
                "keyNameLocation": "916:6:38",
                "keyType": {
                  "id": 34941,
                  "nodeType": "UserDefinedTypeName",
                  "pathNode": {
                    "id": 34940,
                    "name": "IERC20",
                    "nameLocations": [
                      "909:6:38"
                    ],
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 2822,
                    "src": "909:6:38"
                  },
                  "referencedDeclaration": 2822,
                  "src": "909:6:38",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20_$2822",
                    "typeString": "contract IERC20"
                  }
                },
                "nodeType": "Mapping",
                "src": "901:72:38",
                "typeDescriptions": {
                  "typeIdentifier": "t_mapping$_t_contract$_IERC20_$2822_$_t_mapping$_t_bytes32_$_t_uint256_$_$",
                  "typeString": "mapping(contract IERC20 => mapping(bytes32 => uint256))"
                },
                "valueName": "",
                "valueNameLocation": "-1:-1:-1",
                "valueType": {
                  "id": 34944,
                  "keyName": "_requestId",
                  "keyNameLocation": "942:10:38",
                  "keyType": {
                    "id": 34942,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "934:7:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "Mapping",
                  "src": "926:46:38",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$",
                    "typeString": "mapping(bytes32 => uint256)"
                  },
                  "valueName": "_amount",
                  "valueNameLocation": "964:7:38",
                  "valueType": {
                    "id": 34943,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "956:7:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                }
              }
            },
            "visibility": "public"
          },
          {
            "id": 34953,
            "nodeType": "VariableDeclaration",
            "src": "1098:81:38",
            "nodes": [],
            "constant": false,
            "documentation": {
              "id": 34948,
              "nodeType": "StructuredDocumentation",
              "src": "1005:90:38",
              "text": " @notice Storing which modules have the users approved to bond their tokens."
            },
            "mutability": "mutable",
            "name": "_approvals",
            "nameLocation": "1169:10:38",
            "scope": 35417,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_struct$_AddressSet_$5090_storage_$",
              "typeString": "mapping(address => struct EnumerableSet.AddressSet)"
            },
            "typeName": {
              "id": 34952,
              "keyName": "_bonder",
              "keyNameLocation": "1114:7:38",
              "keyType": {
                "id": 34949,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "1106:7:38",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "1098:61:38",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_AddressSet_$5090_storage_$",
                "typeString": "mapping(address => struct EnumerableSet.AddressSet)"
              },
              "valueName": "_modules",
              "valueNameLocation": "1150:8:38",
              "valueType": {
                "id": 34951,
                "nodeType": "UserDefinedTypeName",
                "pathNode": {
                  "id": 34950,
                  "name": "EnumerableSet.AddressSet",
                  "nameLocations": [
                    "1125:13:38",
                    "1139:10:38"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 5090,
                  "src": "1125:24:38"
                },
                "referencedDeclaration": 5090,
                "src": "1125:24:38",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_AddressSet_$5090_storage_ptr",
                  "typeString": "struct EnumerableSet.AddressSet"
                }
              }
            },
            "visibility": "internal"
          },
          {
            "id": 34964,
            "nodeType": "FunctionDefinition",
            "src": "1184:56:38",
            "nodes": [],
            "body": {
              "id": 34963,
              "nodeType": "Block",
              "src": "1213:27:38",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "id": 34961,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 34959,
                      "name": "ORACLE",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 34929,
                      "src": "1219:6:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IOracle_$2282",
                        "typeString": "contract IOracle"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 34960,
                      "name": "_oracle",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 34956,
                      "src": "1228:7:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IOracle_$2282",
                        "typeString": "contract IOracle"
                      }
                    },
                    "src": "1219:16:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IOracle_$2282",
                      "typeString": "contract IOracle"
                    }
                  },
                  "id": 34962,
                  "nodeType": "ExpressionStatement",
                  "src": "1219:16:38"
                }
              ]
            },
            "implemented": true,
            "kind": "constructor",
            "modifiers": [],
            "name": "",
            "nameLocation": "-1:-1:-1",
            "parameters": {
              "id": 34957,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 34956,
                  "mutability": "mutable",
                  "name": "_oracle",
                  "nameLocation": "1204:7:38",
                  "nodeType": "VariableDeclaration",
                  "scope": 34964,
                  "src": "1196:15:38",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IOracle_$2282",
                    "typeString": "contract IOracle"
                  },
                  "typeName": {
                    "id": 34955,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 34954,
                      "name": "IOracle",
                      "nameLocations": [
                        "1196:7:38"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 2282,
                      "src": "1196:7:38"
                    },
                    "referencedDeclaration": 2282,
                    "src": "1196:7:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IOracle_$2282",
                      "typeString": "contract IOracle"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1195:17:38"
            },
            "returnParameters": {
              "id": 34958,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1213:0:38"
            },
            "scope": 35417,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 34982,
            "nodeType": "ModifierDefinition",
            "src": "1334:163:38",
            "nodes": [],
            "body": {
              "id": 34981,
              "nodeType": "Block",
              "src": "1381:116:38",
              "nodes": [],
              "statements": [
                {
                  "condition": {
                    "id": 34975,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "!",
                    "prefix": true,
                    "src": "1391:45:38",
                    "subExpression": {
                      "arguments": [
                        {
                          "id": 34971,
                          "name": "_requestId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 34967,
                          "src": "1413:10:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        {
                          "expression": {
                            "id": 34972,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "1425:3:38",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 34973,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "1429:6:38",
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "src": "1425:10:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          },
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "expression": {
                          "id": 34969,
                          "name": "ORACLE",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 34929,
                          "src": "1392:6:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IOracle_$2282",
                            "typeString": "contract IOracle"
                          }
                        },
                        "id": 34970,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "1399:13:38",
                        "memberName": "allowedModule",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 2231,
                        "src": "1392:20:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_view$_t_bytes32_$_t_address_$returns$_t_bool_$",
                          "typeString": "function (bytes32,address) view external returns (bool)"
                        }
                      },
                      "id": 34974,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1392:44:38",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 34979,
                  "nodeType": "IfStatement",
                  "src": "1387:98:38",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 34976,
                        "name": "AccountingExtension_UnauthorizedModule",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 42450,
                        "src": "1445:38:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$__$",
                          "typeString": "function () pure"
                        }
                      },
                      "id": 34977,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1445:40:38",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 34978,
                    "nodeType": "RevertStatement",
                    "src": "1438:47:38"
                  }
                },
                {
                  "id": 34980,
                  "nodeType": "PlaceholderStatement",
                  "src": "1491:1:38"
                }
              ]
            },
            "documentation": {
              "id": 34965,
              "nodeType": "StructuredDocumentation",
              "src": "1244:87:38",
              "text": " @notice Checks that the caller is an allowed module used in the request."
            },
            "name": "onlyAllowedModule",
            "nameLocation": "1343:17:38",
            "parameters": {
              "id": 34968,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 34967,
                  "mutability": "mutable",
                  "name": "_requestId",
                  "nameLocation": "1369:10:38",
                  "nodeType": "VariableDeclaration",
                  "scope": 34982,
                  "src": "1361:18:38",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 34966,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1361:7:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1360:20:38"
            },
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 35000,
            "nodeType": "ModifierDefinition",
            "src": "1501:169:38",
            "nodes": [],
            "body": {
              "id": 34999,
              "nodeType": "Block",
              "src": "1561:109:38",
              "nodes": [],
              "statements": [
                {
                  "condition": {
                    "id": 34993,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "!",
                    "prefix": true,
                    "src": "1571:40:38",
                    "subExpression": {
                      "arguments": [
                        {
                          "id": 34990,
                          "name": "_requestId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 34984,
                          "src": "1593:10:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        {
                          "id": 34991,
                          "name": "_user",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 34986,
                          "src": "1605:5:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          },
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "expression": {
                          "id": 34988,
                          "name": "ORACLE",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 34929,
                          "src": "1572:6:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IOracle_$2282",
                            "typeString": "contract IOracle"
                          }
                        },
                        "id": 34989,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "1579:13:38",
                        "memberName": "isParticipant",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 2241,
                        "src": "1572:20:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_view$_t_bytes32_$_t_address_$returns$_t_bool_$",
                          "typeString": "function (bytes32,address) view external returns (bool)"
                        }
                      },
                      "id": 34992,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1572:39:38",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 34997,
                  "nodeType": "IfStatement",
                  "src": "1567:91:38",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 34994,
                        "name": "AccountingExtension_UnauthorizedUser",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 42453,
                        "src": "1620:36:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$__$",
                          "typeString": "function () pure"
                        }
                      },
                      "id": 34995,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1620:38:38",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 34996,
                    "nodeType": "RevertStatement",
                    "src": "1613:45:38"
                  }
                },
                {
                  "id": 34998,
                  "nodeType": "PlaceholderStatement",
                  "src": "1664:1:38"
                }
              ]
            },
            "name": "onlyParticipant",
            "nameLocation": "1510:15:38",
            "parameters": {
              "id": 34987,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 34984,
                  "mutability": "mutable",
                  "name": "_requestId",
                  "nameLocation": "1534:10:38",
                  "nodeType": "VariableDeclaration",
                  "scope": 35000,
                  "src": "1526:18:38",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 34983,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1526:7:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 34986,
                  "mutability": "mutable",
                  "name": "_user",
                  "nameLocation": "1554:5:38",
                  "nodeType": "VariableDeclaration",
                  "scope": 35000,
                  "src": "1546:13:38",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 34985,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1546:7:38",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1525:35:38"
            },
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 35038,
            "nodeType": "FunctionDefinition",
            "src": "1713:223:38",
            "nodes": [],
            "body": {
              "id": 35037,
              "nodeType": "Block",
              "src": "1771:165:38",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 35012,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "1801:3:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 35013,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "1805:6:38",
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "1801:10:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "id": 35016,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -28,
                            "src": "1821:4:38",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_AccountingExtension_$35417",
                              "typeString": "contract AccountingExtension"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_AccountingExtension_$35417",
                              "typeString": "contract AccountingExtension"
                            }
                          ],
                          "id": 35015,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "1813:7:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 35014,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "1813:7:38",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 35017,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1813:13:38",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 35018,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 35006,
                        "src": "1828:7:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 35009,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 35004,
                        "src": "1777:6:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$2822",
                          "typeString": "contract IERC20"
                        }
                      },
                      "id": 35011,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "1784:16:38",
                      "memberName": "safeTransferFrom",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2918,
                      "src": "1777:23:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$2822_$_t_address_$_t_address_$_t_uint256_$returns$__$attached_to$_t_contract$_IERC20_$2822_$",
                        "typeString": "function (contract IERC20,address,address,uint256)"
                      }
                    },
                    "id": 35019,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1777:59:38",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 35020,
                  "nodeType": "ExpressionStatement",
                  "src": "1777:59:38"
                },
                {
                  "expression": {
                    "id": 35028,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "baseExpression": {
                          "id": 35021,
                          "name": "balanceOf",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 34937,
                          "src": "1842:9:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$2822_$_t_uint256_$_$",
                            "typeString": "mapping(address => mapping(contract IERC20 => uint256))"
                          }
                        },
                        "id": 35025,
                        "indexExpression": {
                          "expression": {
                            "id": 35022,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "1852:3:38",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 35023,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "1856:6:38",
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "src": "1852:10:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "1842:21:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_contract$_IERC20_$2822_$_t_uint256_$",
                          "typeString": "mapping(contract IERC20 => uint256)"
                        }
                      },
                      "id": 35026,
                      "indexExpression": {
                        "id": 35024,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 35004,
                        "src": "1864:6:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$2822",
                          "typeString": "contract IERC20"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "1842:29:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "+=",
                    "rightHandSide": {
                      "id": 35027,
                      "name": "_amount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 35006,
                      "src": "1875:7:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "1842:40:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 35029,
                  "nodeType": "ExpressionStatement",
                  "src": "1842:40:38"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 35031,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "1903:3:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 35032,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "1907:6:38",
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "1903:10:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 35033,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 35004,
                        "src": "1915:6:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$2822",
                          "typeString": "contract IERC20"
                        }
                      },
                      {
                        "id": 35034,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 35006,
                        "src": "1923:7:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_contract$_IERC20_$2822",
                          "typeString": "contract IERC20"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 35030,
                      "name": "Deposited",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 42393,
                      "src": "1893:9:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_contract$_IERC20_$2822_$_t_uint256_$returns$__$",
                        "typeString": "function (address,contract IERC20,uint256)"
                      }
                    },
                    "id": 35035,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1893:38:38",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 35036,
                  "nodeType": "EmitStatement",
                  "src": "1888:43:38"
                }
              ]
            },
            "baseFunctions": [
              42493
            ],
            "documentation": {
              "id": 35001,
              "nodeType": "StructuredDocumentation",
              "src": "1674:36:38",
              "text": "@inheritdoc IAccountingExtension"
            },
            "functionSelector": "47e7ef24",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "deposit",
            "nameLocation": "1722:7:38",
            "parameters": {
              "id": 35007,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 35004,
                  "mutability": "mutable",
                  "name": "_token",
                  "nameLocation": "1737:6:38",
                  "nodeType": "VariableDeclaration",
                  "scope": 35038,
                  "src": "1730:13:38",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20_$2822",
                    "typeString": "contract IERC20"
                  },
                  "typeName": {
                    "id": 35003,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 35002,
                      "name": "IERC20",
                      "nameLocations": [
                        "1730:6:38"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 2822,
                      "src": "1730:6:38"
                    },
                    "referencedDeclaration": 2822,
                    "src": "1730:6:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20_$2822",
                      "typeString": "contract IERC20"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 35006,
                  "mutability": "mutable",
                  "name": "_amount",
                  "nameLocation": "1753:7:38",
                  "nodeType": "VariableDeclaration",
                  "scope": 35038,
                  "src": "1745:15:38",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 35005,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1745:7:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1729:32:38"
            },
            "returnParameters": {
              "id": 35008,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1771:0:38"
            },
            "scope": 35417,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 35089,
            "nodeType": "FunctionDefinition",
            "src": "1979:362:38",
            "nodes": [],
            "body": {
              "id": 35088,
              "nodeType": "Block",
              "src": "2038:303:38",
              "nodes": [],
              "statements": [
                {
                  "assignments": [
                    35048
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 35048,
                      "mutability": "mutable",
                      "name": "_balance",
                      "nameLocation": "2052:8:38",
                      "nodeType": "VariableDeclaration",
                      "scope": 35088,
                      "src": "2044:16:38",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 35047,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "2044:7:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 35055,
                  "initialValue": {
                    "baseExpression": {
                      "baseExpression": {
                        "id": 35049,
                        "name": "balanceOf",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 34937,
                        "src": "2063:9:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$2822_$_t_uint256_$_$",
                          "typeString": "mapping(address => mapping(contract IERC20 => uint256))"
                        }
                      },
                      "id": 35052,
                      "indexExpression": {
                        "expression": {
                          "id": 35050,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "2073:3:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 35051,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "2077:6:38",
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "2073:10:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "2063:21:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_contract$_IERC20_$2822_$_t_uint256_$",
                        "typeString": "mapping(contract IERC20 => uint256)"
                      }
                    },
                    "id": 35054,
                    "indexExpression": {
                      "id": 35053,
                      "name": "_token",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 35042,
                      "src": "2085:6:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IERC20_$2822",
                        "typeString": "contract IERC20"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "2063:29:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2044:48:38"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 35058,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 35056,
                      "name": "_balance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 35048,
                      "src": "2103:8:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "id": 35057,
                      "name": "_amount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 35044,
                      "src": "2114:7:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2103:18:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 35062,
                  "nodeType": "IfStatement",
                  "src": "2099:70:38",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 35059,
                        "name": "AccountingExtension_InsufficientFunds",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 42444,
                        "src": "2130:37:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$__$",
                          "typeString": "function () pure"
                        }
                      },
                      "id": 35060,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2130:39:38",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 35061,
                    "nodeType": "RevertStatement",
                    "src": "2123:46:38"
                  }
                },
                {
                  "id": 35072,
                  "nodeType": "UncheckedBlock",
                  "src": "2176:65:38",
                  "statements": [
                    {
                      "expression": {
                        "id": 35070,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftHandSide": {
                          "baseExpression": {
                            "baseExpression": {
                              "id": 35063,
                              "name": "balanceOf",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 34937,
                              "src": "2194:9:38",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$2822_$_t_uint256_$_$",
                                "typeString": "mapping(address => mapping(contract IERC20 => uint256))"
                              }
                            },
                            "id": 35067,
                            "indexExpression": {
                              "expression": {
                                "id": 35064,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "2204:3:38",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 35065,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "2208:6:38",
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "src": "2204:10:38",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "2194:21:38",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_contract$_IERC20_$2822_$_t_uint256_$",
                              "typeString": "mapping(contract IERC20 => uint256)"
                            }
                          },
                          "id": 35068,
                          "indexExpression": {
                            "id": 35066,
                            "name": "_token",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 35042,
                            "src": "2216:6:38",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IERC20_$2822",
                              "typeString": "contract IERC20"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "nodeType": "IndexAccess",
                          "src": "2194:29:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "Assignment",
                        "operator": "-=",
                        "rightHandSide": {
                          "id": 35069,
                          "name": "_amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 35044,
                          "src": "2227:7:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "2194:40:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 35071,
                      "nodeType": "ExpressionStatement",
                      "src": "2194:40:38"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 35076,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "2267:3:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 35077,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "2271:6:38",
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "2267:10:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 35078,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 35044,
                        "src": "2279:7:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 35073,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 35042,
                        "src": "2247:6:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$2822",
                          "typeString": "contract IERC20"
                        }
                      },
                      "id": 35075,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "2254:12:38",
                      "memberName": "safeTransfer",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2891,
                      "src": "2247:19:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$2822_$_t_address_$_t_uint256_$returns$__$attached_to$_t_contract$_IERC20_$2822_$",
                        "typeString": "function (contract IERC20,address,uint256)"
                      }
                    },
                    "id": 35079,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2247:40:38",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 35080,
                  "nodeType": "ExpressionStatement",
                  "src": "2247:40:38"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 35082,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "2308:3:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 35083,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "2312:6:38",
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "2308:10:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 35084,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 35042,
                        "src": "2320:6:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$2822",
                          "typeString": "contract IERC20"
                        }
                      },
                      {
                        "id": 35085,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 35044,
                        "src": "2328:7:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_contract$_IERC20_$2822",
                          "typeString": "contract IERC20"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 35081,
                      "name": "Withdrew",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 42403,
                      "src": "2299:8:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_contract$_IERC20_$2822_$_t_uint256_$returns$__$",
                        "typeString": "function (address,contract IERC20,uint256)"
                      }
                    },
                    "id": 35086,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2299:37:38",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 35087,
                  "nodeType": "EmitStatement",
                  "src": "2294:42:38"
                }
              ]
            },
            "baseFunctions": [
              42502
            ],
            "documentation": {
              "id": 35039,
              "nodeType": "StructuredDocumentation",
              "src": "1940:36:38",
              "text": "@inheritdoc IAccountingExtension"
            },
            "functionSelector": "f3fef3a3",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "withdraw",
            "nameLocation": "1988:8:38",
            "parameters": {
              "id": 35045,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 35042,
                  "mutability": "mutable",
                  "name": "_token",
                  "nameLocation": "2004:6:38",
                  "nodeType": "VariableDeclaration",
                  "scope": 35089,
                  "src": "1997:13:38",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20_$2822",
                    "typeString": "contract IERC20"
                  },
                  "typeName": {
                    "id": 35041,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 35040,
                      "name": "IERC20",
                      "nameLocations": [
                        "1997:6:38"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 2822,
                      "src": "1997:6:38"
                    },
                    "referencedDeclaration": 2822,
                    "src": "1997:6:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20_$2822",
                      "typeString": "contract IERC20"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 35044,
                  "mutability": "mutable",
                  "name": "_amount",
                  "nameLocation": "2020:7:38",
                  "nodeType": "VariableDeclaration",
                  "scope": 35089,
                  "src": "2012:15:38",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 35043,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2012:7:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1996:32:38"
            },
            "returnParameters": {
              "id": 35046,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2038:0:38"
            },
            "scope": 35417,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 35157,
            "nodeType": "FunctionDefinition",
            "src": "2384:614:38",
            "nodes": [],
            "body": {
              "id": 35156,
              "nodeType": "Block",
              "src": "2622:376:38",
              "nodes": [],
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 35123,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "baseExpression": {
                        "baseExpression": {
                          "baseExpression": {
                            "id": 35115,
                            "name": "bondedAmountOf",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 34947,
                            "src": "2632:14:38",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$2822_$_t_mapping$_t_bytes32_$_t_uint256_$_$_$",
                              "typeString": "mapping(address => mapping(contract IERC20 => mapping(bytes32 => uint256)))"
                            }
                          },
                          "id": 35117,
                          "indexExpression": {
                            "id": 35116,
                            "name": "_payer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 35094,
                            "src": "2647:6:38",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "2632:22:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_contract$_IERC20_$2822_$_t_mapping$_t_bytes32_$_t_uint256_$_$",
                            "typeString": "mapping(contract IERC20 => mapping(bytes32 => uint256))"
                          }
                        },
                        "id": 35119,
                        "indexExpression": {
                          "id": 35118,
                          "name": "_token",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 35099,
                          "src": "2655:6:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IERC20_$2822",
                            "typeString": "contract IERC20"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "2632:30:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$",
                          "typeString": "mapping(bytes32 => uint256)"
                        }
                      },
                      "id": 35121,
                      "indexExpression": {
                        "id": 35120,
                        "name": "_requestId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 35092,
                        "src": "2663:10:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "2632:42:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "id": 35122,
                      "name": "_amount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 35101,
                      "src": "2677:7:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2632:52:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 35128,
                  "nodeType": "IfStatement",
                  "src": "2628:119:38",
                  "trueBody": {
                    "id": 35127,
                    "nodeType": "Block",
                    "src": "2686:61:38",
                    "statements": [
                      {
                        "errorCall": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 35124,
                            "name": "AccountingExtension_InsufficientFunds",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 42444,
                            "src": "2701:37:38",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_error_pure$__$returns$__$",
                              "typeString": "function () pure"
                            }
                          },
                          "id": 35125,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2701:39:38",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 35126,
                        "nodeType": "RevertStatement",
                        "src": "2694:46:38"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "id": 35135,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "baseExpression": {
                          "id": 35129,
                          "name": "balanceOf",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 34937,
                          "src": "2753:9:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$2822_$_t_uint256_$_$",
                            "typeString": "mapping(address => mapping(contract IERC20 => uint256))"
                          }
                        },
                        "id": 35132,
                        "indexExpression": {
                          "id": 35130,
                          "name": "_receiver",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 35096,
                          "src": "2763:9:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "2753:20:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_contract$_IERC20_$2822_$_t_uint256_$",
                          "typeString": "mapping(contract IERC20 => uint256)"
                        }
                      },
                      "id": 35133,
                      "indexExpression": {
                        "id": 35131,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 35099,
                        "src": "2774:6:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$2822",
                          "typeString": "contract IERC20"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "2753:28:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "+=",
                    "rightHandSide": {
                      "id": 35134,
                      "name": "_amount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 35101,
                      "src": "2785:7:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2753:39:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 35136,
                  "nodeType": "ExpressionStatement",
                  "src": "2753:39:38"
                },
                {
                  "id": 35147,
                  "nodeType": "UncheckedBlock",
                  "src": "2799:78:38",
                  "statements": [
                    {
                      "expression": {
                        "id": 35145,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftHandSide": {
                          "baseExpression": {
                            "baseExpression": {
                              "baseExpression": {
                                "id": 35137,
                                "name": "bondedAmountOf",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 34947,
                                "src": "2817:14:38",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$2822_$_t_mapping$_t_bytes32_$_t_uint256_$_$_$",
                                  "typeString": "mapping(address => mapping(contract IERC20 => mapping(bytes32 => uint256)))"
                                }
                              },
                              "id": 35141,
                              "indexExpression": {
                                "id": 35138,
                                "name": "_payer",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 35094,
                                "src": "2832:6:38",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "2817:22:38",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_contract$_IERC20_$2822_$_t_mapping$_t_bytes32_$_t_uint256_$_$",
                                "typeString": "mapping(contract IERC20 => mapping(bytes32 => uint256))"
                              }
                            },
                            "id": 35142,
                            "indexExpression": {
                              "id": 35139,
                              "name": "_token",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 35099,
                              "src": "2840:6:38",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20_$2822",
                                "typeString": "contract IERC20"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "2817:30:38",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$",
                              "typeString": "mapping(bytes32 => uint256)"
                            }
                          },
                          "id": 35143,
                          "indexExpression": {
                            "id": 35140,
                            "name": "_requestId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 35092,
                            "src": "2848:10:38",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "nodeType": "IndexAccess",
                          "src": "2817:42:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "Assignment",
                        "operator": "-=",
                        "rightHandSide": {
                          "id": 35144,
                          "name": "_amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 35101,
                          "src": "2863:7:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "2817:53:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 35146,
                      "nodeType": "ExpressionStatement",
                      "src": "2817:53:38"
                    }
                  ]
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 35149,
                        "name": "_requestId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 35092,
                        "src": "2906:10:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 35150,
                        "name": "_receiver",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 35096,
                        "src": "2932:9:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 35151,
                        "name": "_payer",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 35094,
                        "src": "2951:6:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 35152,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 35099,
                        "src": "2967:6:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$2822",
                          "typeString": "contract IERC20"
                        }
                      },
                      {
                        "id": 35153,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 35101,
                        "src": "2984:7:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_contract$_IERC20_$2822",
                          "typeString": "contract IERC20"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 35148,
                      "name": "Paid",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 42417,
                      "src": "2888:4:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_address_$_t_contract$_IERC20_$2822_$_t_uint256_$returns$__$",
                        "typeString": "function (bytes32,address,address,contract IERC20,uint256)"
                      }
                    },
                    "id": 35154,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [
                      "2894:10:38",
                      "2918:12:38",
                      "2943:6:38",
                      "2959:6:38",
                      "2975:7:38"
                    ],
                    "names": [
                      "_requestId",
                      "_beneficiary",
                      "_payer",
                      "_token",
                      "_amount"
                    ],
                    "nodeType": "FunctionCall",
                    "src": "2888:105:38",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 35155,
                  "nodeType": "EmitStatement",
                  "src": "2883:110:38"
                }
              ]
            },
            "baseFunctions": [
              42517
            ],
            "documentation": {
              "id": 35090,
              "nodeType": "StructuredDocumentation",
              "src": "2345:36:38",
              "text": "@inheritdoc IAccountingExtension"
            },
            "functionSelector": "cab0e418",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "id": 35104,
                    "name": "_requestId",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 35092,
                    "src": "2535:10:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 35105,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 35103,
                  "name": "onlyAllowedModule",
                  "nameLocations": [
                    "2517:17:38"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 34982,
                  "src": "2517:17:38"
                },
                "nodeType": "ModifierInvocation",
                "src": "2517:29:38"
              },
              {
                "arguments": [
                  {
                    "id": 35107,
                    "name": "_requestId",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 35092,
                    "src": "2563:10:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  {
                    "id": 35108,
                    "name": "_payer",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 35094,
                    "src": "2575:6:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 35109,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 35106,
                  "name": "onlyParticipant",
                  "nameLocations": [
                    "2547:15:38"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 35000,
                  "src": "2547:15:38"
                },
                "nodeType": "ModifierInvocation",
                "src": "2547:35:38"
              },
              {
                "arguments": [
                  {
                    "id": 35111,
                    "name": "_requestId",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 35092,
                    "src": "2599:10:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  {
                    "id": 35112,
                    "name": "_receiver",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 35096,
                    "src": "2611:9:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 35113,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 35110,
                  "name": "onlyParticipant",
                  "nameLocations": [
                    "2583:15:38"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 35000,
                  "src": "2583:15:38"
                },
                "nodeType": "ModifierInvocation",
                "src": "2583:38:38"
              }
            ],
            "name": "pay",
            "nameLocation": "2393:3:38",
            "parameters": {
              "id": 35102,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 35092,
                  "mutability": "mutable",
                  "name": "_requestId",
                  "nameLocation": "2410:10:38",
                  "nodeType": "VariableDeclaration",
                  "scope": 35157,
                  "src": "2402:18:38",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 35091,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2402:7:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 35094,
                  "mutability": "mutable",
                  "name": "_payer",
                  "nameLocation": "2434:6:38",
                  "nodeType": "VariableDeclaration",
                  "scope": 35157,
                  "src": "2426:14:38",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 35093,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2426:7:38",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 35096,
                  "mutability": "mutable",
                  "name": "_receiver",
                  "nameLocation": "2454:9:38",
                  "nodeType": "VariableDeclaration",
                  "scope": 35157,
                  "src": "2446:17:38",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 35095,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2446:7:38",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 35099,
                  "mutability": "mutable",
                  "name": "_token",
                  "nameLocation": "2476:6:38",
                  "nodeType": "VariableDeclaration",
                  "scope": 35157,
                  "src": "2469:13:38",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20_$2822",
                    "typeString": "contract IERC20"
                  },
                  "typeName": {
                    "id": 35098,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 35097,
                      "name": "IERC20",
                      "nameLocations": [
                        "2469:6:38"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 2822,
                      "src": "2469:6:38"
                    },
                    "referencedDeclaration": 2822,
                    "src": "2469:6:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20_$2822",
                      "typeString": "contract IERC20"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 35101,
                  "mutability": "mutable",
                  "name": "_amount",
                  "nameLocation": "2496:7:38",
                  "nodeType": "VariableDeclaration",
                  "scope": 35157,
                  "src": "2488:15:38",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 35100,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2488:7:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2396:111:38"
            },
            "returnParameters": {
              "id": 35114,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2622:0:38"
            },
            "scope": 35417,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 35227,
            "nodeType": "FunctionDefinition",
            "src": "3041:566:38",
            "nodes": [],
            "body": {
              "id": 35226,
              "nodeType": "Block",
              "src": "3220:387:38",
              "nodes": [],
              "statements": [
                {
                  "condition": {
                    "id": 35184,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "!",
                    "prefix": true,
                    "src": "3230:41:38",
                    "subExpression": {
                      "arguments": [
                        {
                          "expression": {
                            "id": 35181,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "3260:3:38",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 35182,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "3264:6:38",
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "src": "3260:10:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "expression": {
                          "baseExpression": {
                            "id": 35177,
                            "name": "_approvals",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 34953,
                            "src": "3231:10:38",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_struct$_AddressSet_$5090_storage_$",
                              "typeString": "mapping(address => struct EnumerableSet.AddressSet storage ref)"
                            }
                          },
                          "id": 35179,
                          "indexExpression": {
                            "id": 35178,
                            "name": "_bonder",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 35160,
                            "src": "3242:7:38",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "3231:19:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_AddressSet_$5090_storage",
                            "typeString": "struct EnumerableSet.AddressSet storage ref"
                          }
                        },
                        "id": 35180,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "3251:8:38",
                        "memberName": "contains",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 5171,
                        "src": "3231:28:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_struct$_AddressSet_$5090_storage_ptr_$_t_address_$returns$_t_bool_$attached_to$_t_struct$_AddressSet_$5090_storage_ptr_$",
                          "typeString": "function (struct EnumerableSet.AddressSet storage pointer,address) view returns (bool)"
                        }
                      },
                      "id": 35183,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "3231:40:38",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 35188,
                  "nodeType": "IfStatement",
                  "src": "3226:97:38",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 35185,
                        "name": "AccountingExtension_InsufficientAllowance",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 42447,
                        "src": "3280:41:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$__$",
                          "typeString": "function () pure"
                        }
                      },
                      "id": 35186,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "3280:43:38",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 35187,
                    "nodeType": "RevertStatement",
                    "src": "3273:50:38"
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 35195,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "baseExpression": {
                        "baseExpression": {
                          "id": 35189,
                          "name": "balanceOf",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 34937,
                          "src": "3333:9:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$2822_$_t_uint256_$_$",
                            "typeString": "mapping(address => mapping(contract IERC20 => uint256))"
                          }
                        },
                        "id": 35191,
                        "indexExpression": {
                          "id": 35190,
                          "name": "_bonder",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 35160,
                          "src": "3343:7:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "3333:18:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_contract$_IERC20_$2822_$_t_uint256_$",
                          "typeString": "mapping(contract IERC20 => uint256)"
                        }
                      },
                      "id": 35193,
                      "indexExpression": {
                        "id": 35192,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 35165,
                        "src": "3352:6:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$2822",
                          "typeString": "contract IERC20"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "3333:26:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "id": 35194,
                      "name": "_amount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 35167,
                      "src": "3362:7:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3333:36:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 35199,
                  "nodeType": "IfStatement",
                  "src": "3329:88:38",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 35196,
                        "name": "AccountingExtension_InsufficientFunds",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 42444,
                        "src": "3378:37:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$__$",
                          "typeString": "function () pure"
                        }
                      },
                      "id": 35197,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "3378:39:38",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 35198,
                    "nodeType": "RevertStatement",
                    "src": "3371:46:38"
                  }
                },
                {
                  "expression": {
                    "id": 35208,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "baseExpression": {
                          "baseExpression": {
                            "id": 35200,
                            "name": "bondedAmountOf",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 34947,
                            "src": "3424:14:38",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$2822_$_t_mapping$_t_bytes32_$_t_uint256_$_$_$",
                              "typeString": "mapping(address => mapping(contract IERC20 => mapping(bytes32 => uint256)))"
                            }
                          },
                          "id": 35204,
                          "indexExpression": {
                            "id": 35201,
                            "name": "_bonder",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 35160,
                            "src": "3439:7:38",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "3424:23:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_contract$_IERC20_$2822_$_t_mapping$_t_bytes32_$_t_uint256_$_$",
                            "typeString": "mapping(contract IERC20 => mapping(bytes32 => uint256))"
                          }
                        },
                        "id": 35205,
                        "indexExpression": {
                          "id": 35202,
                          "name": "_token",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 35165,
                          "src": "3448:6:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IERC20_$2822",
                            "typeString": "contract IERC20"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "3424:31:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$",
                          "typeString": "mapping(bytes32 => uint256)"
                        }
                      },
                      "id": 35206,
                      "indexExpression": {
                        "id": 35203,
                        "name": "_requestId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 35162,
                        "src": "3456:10:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "3424:43:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "+=",
                    "rightHandSide": {
                      "id": 35207,
                      "name": "_amount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 35167,
                      "src": "3471:7:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3424:54:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 35209,
                  "nodeType": "ExpressionStatement",
                  "src": "3424:54:38"
                },
                {
                  "id": 35218,
                  "nodeType": "UncheckedBlock",
                  "src": "3485:62:38",
                  "statements": [
                    {
                      "expression": {
                        "id": 35216,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftHandSide": {
                          "baseExpression": {
                            "baseExpression": {
                              "id": 35210,
                              "name": "balanceOf",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 34937,
                              "src": "3503:9:38",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$2822_$_t_uint256_$_$",
                                "typeString": "mapping(address => mapping(contract IERC20 => uint256))"
                              }
                            },
                            "id": 35213,
                            "indexExpression": {
                              "id": 35211,
                              "name": "_bonder",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 35160,
                              "src": "3513:7:38",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "3503:18:38",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_contract$_IERC20_$2822_$_t_uint256_$",
                              "typeString": "mapping(contract IERC20 => uint256)"
                            }
                          },
                          "id": 35214,
                          "indexExpression": {
                            "id": 35212,
                            "name": "_token",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 35165,
                            "src": "3522:6:38",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IERC20_$2822",
                              "typeString": "contract IERC20"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "nodeType": "IndexAccess",
                          "src": "3503:26:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "Assignment",
                        "operator": "-=",
                        "rightHandSide": {
                          "id": 35215,
                          "name": "_amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 35167,
                          "src": "3533:7:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "3503:37:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 35217,
                      "nodeType": "ExpressionStatement",
                      "src": "3503:37:38"
                    }
                  ]
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 35220,
                        "name": "_requestId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 35162,
                        "src": "3565:10:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 35221,
                        "name": "_bonder",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 35160,
                        "src": "3577:7:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 35222,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 35165,
                        "src": "3586:6:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$2822",
                          "typeString": "contract IERC20"
                        }
                      },
                      {
                        "id": 35223,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 35167,
                        "src": "3594:7:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_contract$_IERC20_$2822",
                          "typeString": "contract IERC20"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 35219,
                      "name": "Bonded",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 42429,
                      "src": "3558:6:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_contract$_IERC20_$2822_$_t_uint256_$returns$__$",
                        "typeString": "function (bytes32,address,contract IERC20,uint256)"
                      }
                    },
                    "id": 35224,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3558:44:38",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 35225,
                  "nodeType": "EmitStatement",
                  "src": "3553:49:38"
                }
              ]
            },
            "baseFunctions": [
              42530
            ],
            "documentation": {
              "id": 35158,
              "nodeType": "StructuredDocumentation",
              "src": "3002:36:38",
              "text": "@inheritdoc IAccountingExtension"
            },
            "functionSelector": "bba9f26f",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "id": 35170,
                    "name": "_requestId",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 35162,
                    "src": "3171:10:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 35171,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 35169,
                  "name": "onlyAllowedModule",
                  "nameLocations": [
                    "3153:17:38"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 34982,
                  "src": "3153:17:38"
                },
                "nodeType": "ModifierInvocation",
                "src": "3153:29:38"
              },
              {
                "arguments": [
                  {
                    "id": 35173,
                    "name": "_requestId",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 35162,
                    "src": "3199:10:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  {
                    "id": 35174,
                    "name": "_bonder",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 35160,
                    "src": "3211:7:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 35175,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 35172,
                  "name": "onlyParticipant",
                  "nameLocations": [
                    "3183:15:38"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 35000,
                  "src": "3183:15:38"
                },
                "nodeType": "ModifierInvocation",
                "src": "3183:36:38"
              }
            ],
            "name": "bond",
            "nameLocation": "3050:4:38",
            "parameters": {
              "id": 35168,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 35160,
                  "mutability": "mutable",
                  "name": "_bonder",
                  "nameLocation": "3068:7:38",
                  "nodeType": "VariableDeclaration",
                  "scope": 35227,
                  "src": "3060:15:38",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 35159,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3060:7:38",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 35162,
                  "mutability": "mutable",
                  "name": "_requestId",
                  "nameLocation": "3089:10:38",
                  "nodeType": "VariableDeclaration",
                  "scope": 35227,
                  "src": "3081:18:38",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 35161,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3081:7:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 35165,
                  "mutability": "mutable",
                  "name": "_token",
                  "nameLocation": "3112:6:38",
                  "nodeType": "VariableDeclaration",
                  "scope": 35227,
                  "src": "3105:13:38",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20_$2822",
                    "typeString": "contract IERC20"
                  },
                  "typeName": {
                    "id": 35164,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 35163,
                      "name": "IERC20",
                      "nameLocations": [
                        "3105:6:38"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 2822,
                      "src": "3105:6:38"
                    },
                    "referencedDeclaration": 2822,
                    "src": "3105:6:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20_$2822",
                      "typeString": "contract IERC20"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 35167,
                  "mutability": "mutable",
                  "name": "_amount",
                  "nameLocation": "3132:7:38",
                  "nodeType": "VariableDeclaration",
                  "scope": 35227,
                  "src": "3124:15:38",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 35166,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3124:7:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3054:89:38"
            },
            "returnParameters": {
              "id": 35176,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3220:0:38"
            },
            "scope": 35417,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 35308,
            "nodeType": "FunctionDefinition",
            "src": "3650:644:38",
            "nodes": [],
            "body": {
              "id": 35307,
              "nodeType": "Block",
              "src": "3850:444:38",
              "nodes": [],
              "statements": [
                {
                  "condition": {
                    "id": 35264,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "!",
                    "prefix": true,
                    "src": "3860:84:38",
                    "subExpression": {
                      "components": [
                        {
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 35262,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "arguments": [
                              {
                                "expression": {
                                  "id": 35253,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -15,
                                  "src": "3891:3:38",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 35254,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberLocation": "3895:6:38",
                                "memberName": "sender",
                                "nodeType": "MemberAccess",
                                "src": "3891:10:38",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "expression": {
                                "baseExpression": {
                                  "id": 35249,
                                  "name": "_approvals",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 34953,
                                  "src": "3862:10:38",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_struct$_AddressSet_$5090_storage_$",
                                    "typeString": "mapping(address => struct EnumerableSet.AddressSet storage ref)"
                                  }
                                },
                                "id": 35251,
                                "indexExpression": {
                                  "id": 35250,
                                  "name": "_bonder",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 35230,
                                  "src": "3873:7:38",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "3862:19:38",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_AddressSet_$5090_storage",
                                  "typeString": "struct EnumerableSet.AddressSet storage ref"
                                }
                              },
                              "id": 35252,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "3882:8:38",
                              "memberName": "contains",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 5171,
                              "src": "3862:28:38",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_struct$_AddressSet_$5090_storage_ptr_$_t_address_$returns$_t_bool_$attached_to$_t_struct$_AddressSet_$5090_storage_ptr_$",
                                "typeString": "function (struct EnumerableSet.AddressSet storage pointer,address) view returns (bool)"
                              }
                            },
                            "id": 35255,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3862:40:38",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "||",
                          "rightExpression": {
                            "arguments": [
                              {
                                "id": 35260,
                                "name": "_sender",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 35239,
                                "src": "3935:7:38",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "expression": {
                                "baseExpression": {
                                  "id": 35256,
                                  "name": "_approvals",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 34953,
                                  "src": "3906:10:38",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_struct$_AddressSet_$5090_storage_$",
                                    "typeString": "mapping(address => struct EnumerableSet.AddressSet storage ref)"
                                  }
                                },
                                "id": 35258,
                                "indexExpression": {
                                  "id": 35257,
                                  "name": "_bonder",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 35230,
                                  "src": "3917:7:38",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "3906:19:38",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_AddressSet_$5090_storage",
                                  "typeString": "struct EnumerableSet.AddressSet storage ref"
                                }
                              },
                              "id": 35259,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "3926:8:38",
                              "memberName": "contains",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 5171,
                              "src": "3906:28:38",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_struct$_AddressSet_$5090_storage_ptr_$_t_address_$returns$_t_bool_$attached_to$_t_struct$_AddressSet_$5090_storage_ptr_$",
                                "typeString": "function (struct EnumerableSet.AddressSet storage pointer,address) view returns (bool)"
                              }
                            },
                            "id": 35261,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3906:37:38",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "3862:81:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        }
                      ],
                      "id": 35263,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "3861:83:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 35269,
                  "nodeType": "IfStatement",
                  "src": "3856:155:38",
                  "trueBody": {
                    "id": 35268,
                    "nodeType": "Block",
                    "src": "3946:65:38",
                    "statements": [
                      {
                        "errorCall": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 35265,
                            "name": "AccountingExtension_InsufficientAllowance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 42447,
                            "src": "3961:41:38",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_error_pure$__$returns$__$",
                              "typeString": "function () pure"
                            }
                          },
                          "id": 35266,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3961:43:38",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 35267,
                        "nodeType": "RevertStatement",
                        "src": "3954:50:38"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 35276,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "baseExpression": {
                        "baseExpression": {
                          "id": 35270,
                          "name": "balanceOf",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 34937,
                          "src": "4020:9:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$2822_$_t_uint256_$_$",
                            "typeString": "mapping(address => mapping(contract IERC20 => uint256))"
                          }
                        },
                        "id": 35272,
                        "indexExpression": {
                          "id": 35271,
                          "name": "_bonder",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 35230,
                          "src": "4030:7:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "4020:18:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_contract$_IERC20_$2822_$_t_uint256_$",
                          "typeString": "mapping(contract IERC20 => uint256)"
                        }
                      },
                      "id": 35274,
                      "indexExpression": {
                        "id": 35273,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 35235,
                        "src": "4039:6:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$2822",
                          "typeString": "contract IERC20"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "4020:26:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "id": 35275,
                      "name": "_amount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 35237,
                      "src": "4049:7:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "4020:36:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 35280,
                  "nodeType": "IfStatement",
                  "src": "4016:88:38",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 35277,
                        "name": "AccountingExtension_InsufficientFunds",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 42444,
                        "src": "4065:37:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$__$",
                          "typeString": "function () pure"
                        }
                      },
                      "id": 35278,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "4065:39:38",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 35279,
                    "nodeType": "RevertStatement",
                    "src": "4058:46:38"
                  }
                },
                {
                  "expression": {
                    "id": 35289,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "baseExpression": {
                          "baseExpression": {
                            "id": 35281,
                            "name": "bondedAmountOf",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 34947,
                            "src": "4111:14:38",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$2822_$_t_mapping$_t_bytes32_$_t_uint256_$_$_$",
                              "typeString": "mapping(address => mapping(contract IERC20 => mapping(bytes32 => uint256)))"
                            }
                          },
                          "id": 35285,
                          "indexExpression": {
                            "id": 35282,
                            "name": "_bonder",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 35230,
                            "src": "4126:7:38",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "4111:23:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_contract$_IERC20_$2822_$_t_mapping$_t_bytes32_$_t_uint256_$_$",
                            "typeString": "mapping(contract IERC20 => mapping(bytes32 => uint256))"
                          }
                        },
                        "id": 35286,
                        "indexExpression": {
                          "id": 35283,
                          "name": "_token",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 35235,
                          "src": "4135:6:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IERC20_$2822",
                            "typeString": "contract IERC20"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "4111:31:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$",
                          "typeString": "mapping(bytes32 => uint256)"
                        }
                      },
                      "id": 35287,
                      "indexExpression": {
                        "id": 35284,
                        "name": "_requestId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 35232,
                        "src": "4143:10:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "4111:43:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "+=",
                    "rightHandSide": {
                      "id": 35288,
                      "name": "_amount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 35237,
                      "src": "4158:7:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "4111:54:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 35290,
                  "nodeType": "ExpressionStatement",
                  "src": "4111:54:38"
                },
                {
                  "id": 35299,
                  "nodeType": "UncheckedBlock",
                  "src": "4172:62:38",
                  "statements": [
                    {
                      "expression": {
                        "id": 35297,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftHandSide": {
                          "baseExpression": {
                            "baseExpression": {
                              "id": 35291,
                              "name": "balanceOf",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 34937,
                              "src": "4190:9:38",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$2822_$_t_uint256_$_$",
                                "typeString": "mapping(address => mapping(contract IERC20 => uint256))"
                              }
                            },
                            "id": 35294,
                            "indexExpression": {
                              "id": 35292,
                              "name": "_bonder",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 35230,
                              "src": "4200:7:38",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "4190:18:38",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_contract$_IERC20_$2822_$_t_uint256_$",
                              "typeString": "mapping(contract IERC20 => uint256)"
                            }
                          },
                          "id": 35295,
                          "indexExpression": {
                            "id": 35293,
                            "name": "_token",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 35235,
                            "src": "4209:6:38",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IERC20_$2822",
                              "typeString": "contract IERC20"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "nodeType": "IndexAccess",
                          "src": "4190:26:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "Assignment",
                        "operator": "-=",
                        "rightHandSide": {
                          "id": 35296,
                          "name": "_amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 35237,
                          "src": "4220:7:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "4190:37:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 35298,
                      "nodeType": "ExpressionStatement",
                      "src": "4190:37:38"
                    }
                  ]
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 35301,
                        "name": "_requestId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 35232,
                        "src": "4252:10:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 35302,
                        "name": "_bonder",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 35230,
                        "src": "4264:7:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 35303,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 35235,
                        "src": "4273:6:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$2822",
                          "typeString": "contract IERC20"
                        }
                      },
                      {
                        "id": 35304,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 35237,
                        "src": "4281:7:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_contract$_IERC20_$2822",
                          "typeString": "contract IERC20"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 35300,
                      "name": "Bonded",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 42429,
                      "src": "4245:6:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_contract$_IERC20_$2822_$_t_uint256_$returns$__$",
                        "typeString": "function (bytes32,address,contract IERC20,uint256)"
                      }
                    },
                    "id": 35305,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4245:44:38",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 35306,
                  "nodeType": "EmitStatement",
                  "src": "4240:49:38"
                }
              ]
            },
            "baseFunctions": [
              42545
            ],
            "documentation": {
              "id": 35228,
              "nodeType": "StructuredDocumentation",
              "src": "3611:36:38",
              "text": "@inheritdoc IAccountingExtension"
            },
            "functionSelector": "4aa90d16",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "id": 35242,
                    "name": "_requestId",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 35232,
                    "src": "3801:10:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 35243,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 35241,
                  "name": "onlyAllowedModule",
                  "nameLocations": [
                    "3783:17:38"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 34982,
                  "src": "3783:17:38"
                },
                "nodeType": "ModifierInvocation",
                "src": "3783:29:38"
              },
              {
                "arguments": [
                  {
                    "id": 35245,
                    "name": "_requestId",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 35232,
                    "src": "3829:10:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  {
                    "id": 35246,
                    "name": "_bonder",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 35230,
                    "src": "3841:7:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 35247,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 35244,
                  "name": "onlyParticipant",
                  "nameLocations": [
                    "3813:15:38"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 35000,
                  "src": "3813:15:38"
                },
                "nodeType": "ModifierInvocation",
                "src": "3813:36:38"
              }
            ],
            "name": "bond",
            "nameLocation": "3659:4:38",
            "parameters": {
              "id": 35240,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 35230,
                  "mutability": "mutable",
                  "name": "_bonder",
                  "nameLocation": "3677:7:38",
                  "nodeType": "VariableDeclaration",
                  "scope": 35308,
                  "src": "3669:15:38",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 35229,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3669:7:38",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 35232,
                  "mutability": "mutable",
                  "name": "_requestId",
                  "nameLocation": "3698:10:38",
                  "nodeType": "VariableDeclaration",
                  "scope": 35308,
                  "src": "3690:18:38",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 35231,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3690:7:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 35235,
                  "mutability": "mutable",
                  "name": "_token",
                  "nameLocation": "3721:6:38",
                  "nodeType": "VariableDeclaration",
                  "scope": 35308,
                  "src": "3714:13:38",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20_$2822",
                    "typeString": "contract IERC20"
                  },
                  "typeName": {
                    "id": 35234,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 35233,
                      "name": "IERC20",
                      "nameLocations": [
                        "3714:6:38"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 2822,
                      "src": "3714:6:38"
                    },
                    "referencedDeclaration": 2822,
                    "src": "3714:6:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20_$2822",
                      "typeString": "contract IERC20"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 35237,
                  "mutability": "mutable",
                  "name": "_amount",
                  "nameLocation": "3741:7:38",
                  "nodeType": "VariableDeclaration",
                  "scope": 35308,
                  "src": "3733:15:38",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 35236,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3733:7:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 35239,
                  "mutability": "mutable",
                  "name": "_sender",
                  "nameLocation": "3762:7:38",
                  "nodeType": "VariableDeclaration",
                  "scope": 35308,
                  "src": "3754:15:38",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 35238,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3754:7:38",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3663:110:38"
            },
            "returnParameters": {
              "id": 35248,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3850:0:38"
            },
            "scope": 35417,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 35368,
            "nodeType": "FunctionDefinition",
            "src": "4337:485:38",
            "nodes": [],
            "body": {
              "id": 35367,
              "nodeType": "Block",
              "src": "4519:303:38",
              "nodes": [],
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 35336,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "baseExpression": {
                        "baseExpression": {
                          "baseExpression": {
                            "id": 35328,
                            "name": "bondedAmountOf",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 34947,
                            "src": "4529:14:38",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$2822_$_t_mapping$_t_bytes32_$_t_uint256_$_$_$",
                              "typeString": "mapping(address => mapping(contract IERC20 => mapping(bytes32 => uint256)))"
                            }
                          },
                          "id": 35330,
                          "indexExpression": {
                            "id": 35329,
                            "name": "_bonder",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 35311,
                            "src": "4544:7:38",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "4529:23:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_contract$_IERC20_$2822_$_t_mapping$_t_bytes32_$_t_uint256_$_$",
                            "typeString": "mapping(contract IERC20 => mapping(bytes32 => uint256))"
                          }
                        },
                        "id": 35332,
                        "indexExpression": {
                          "id": 35331,
                          "name": "_token",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 35316,
                          "src": "4553:6:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IERC20_$2822",
                            "typeString": "contract IERC20"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "4529:31:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$",
                          "typeString": "mapping(bytes32 => uint256)"
                        }
                      },
                      "id": 35334,
                      "indexExpression": {
                        "id": 35333,
                        "name": "_requestId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 35313,
                        "src": "4561:10:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "4529:43:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "id": 35335,
                      "name": "_amount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 35318,
                      "src": "4575:7:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "4529:53:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 35340,
                  "nodeType": "IfStatement",
                  "src": "4525:105:38",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 35337,
                        "name": "AccountingExtension_InsufficientFunds",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 42444,
                        "src": "4591:37:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$__$",
                          "typeString": "function () pure"
                        }
                      },
                      "id": 35338,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "4591:39:38",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 35339,
                    "nodeType": "RevertStatement",
                    "src": "4584:46:38"
                  }
                },
                {
                  "expression": {
                    "id": 35347,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "baseExpression": {
                          "id": 35341,
                          "name": "balanceOf",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 34937,
                          "src": "4637:9:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$2822_$_t_uint256_$_$",
                            "typeString": "mapping(address => mapping(contract IERC20 => uint256))"
                          }
                        },
                        "id": 35344,
                        "indexExpression": {
                          "id": 35342,
                          "name": "_bonder",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 35311,
                          "src": "4647:7:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "4637:18:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_contract$_IERC20_$2822_$_t_uint256_$",
                          "typeString": "mapping(contract IERC20 => uint256)"
                        }
                      },
                      "id": 35345,
                      "indexExpression": {
                        "id": 35343,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 35316,
                        "src": "4656:6:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$2822",
                          "typeString": "contract IERC20"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "4637:26:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "+=",
                    "rightHandSide": {
                      "id": 35346,
                      "name": "_amount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 35318,
                      "src": "4667:7:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "4637:37:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 35348,
                  "nodeType": "ExpressionStatement",
                  "src": "4637:37:38"
                },
                {
                  "id": 35359,
                  "nodeType": "UncheckedBlock",
                  "src": "4681:79:38",
                  "statements": [
                    {
                      "expression": {
                        "id": 35357,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftHandSide": {
                          "baseExpression": {
                            "baseExpression": {
                              "baseExpression": {
                                "id": 35349,
                                "name": "bondedAmountOf",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 34947,
                                "src": "4699:14:38",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$2822_$_t_mapping$_t_bytes32_$_t_uint256_$_$_$",
                                  "typeString": "mapping(address => mapping(contract IERC20 => mapping(bytes32 => uint256)))"
                                }
                              },
                              "id": 35353,
                              "indexExpression": {
                                "id": 35350,
                                "name": "_bonder",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 35311,
                                "src": "4714:7:38",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "4699:23:38",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_contract$_IERC20_$2822_$_t_mapping$_t_bytes32_$_t_uint256_$_$",
                                "typeString": "mapping(contract IERC20 => mapping(bytes32 => uint256))"
                              }
                            },
                            "id": 35354,
                            "indexExpression": {
                              "id": 35351,
                              "name": "_token",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 35316,
                              "src": "4723:6:38",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20_$2822",
                                "typeString": "contract IERC20"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "4699:31:38",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$",
                              "typeString": "mapping(bytes32 => uint256)"
                            }
                          },
                          "id": 35355,
                          "indexExpression": {
                            "id": 35352,
                            "name": "_requestId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 35313,
                            "src": "4731:10:38",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "nodeType": "IndexAccess",
                          "src": "4699:43:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "Assignment",
                        "operator": "-=",
                        "rightHandSide": {
                          "id": 35356,
                          "name": "_amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 35318,
                          "src": "4746:7:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "4699:54:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 35358,
                      "nodeType": "ExpressionStatement",
                      "src": "4699:54:38"
                    }
                  ]
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 35361,
                        "name": "_requestId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 35313,
                        "src": "4780:10:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 35362,
                        "name": "_bonder",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 35311,
                        "src": "4792:7:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 35363,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 35316,
                        "src": "4801:6:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$2822",
                          "typeString": "contract IERC20"
                        }
                      },
                      {
                        "id": 35364,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 35318,
                        "src": "4809:7:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_contract$_IERC20_$2822",
                          "typeString": "contract IERC20"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 35360,
                      "name": "Released",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 42441,
                      "src": "4771:8:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_contract$_IERC20_$2822_$_t_uint256_$returns$__$",
                        "typeString": "function (bytes32,address,contract IERC20,uint256)"
                      }
                    },
                    "id": 35365,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4771:46:38",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 35366,
                  "nodeType": "EmitStatement",
                  "src": "4766:51:38"
                }
              ]
            },
            "baseFunctions": [
              42558
            ],
            "documentation": {
              "id": 35309,
              "nodeType": "StructuredDocumentation",
              "src": "4298:36:38",
              "text": "@inheritdoc IAccountingExtension"
            },
            "functionSelector": "a6d09dc8",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "id": 35321,
                    "name": "_requestId",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 35313,
                    "src": "4470:10:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 35322,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 35320,
                  "name": "onlyAllowedModule",
                  "nameLocations": [
                    "4452:17:38"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 34982,
                  "src": "4452:17:38"
                },
                "nodeType": "ModifierInvocation",
                "src": "4452:29:38"
              },
              {
                "arguments": [
                  {
                    "id": 35324,
                    "name": "_requestId",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 35313,
                    "src": "4498:10:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  {
                    "id": 35325,
                    "name": "_bonder",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 35311,
                    "src": "4510:7:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 35326,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 35323,
                  "name": "onlyParticipant",
                  "nameLocations": [
                    "4482:15:38"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 35000,
                  "src": "4482:15:38"
                },
                "nodeType": "ModifierInvocation",
                "src": "4482:36:38"
              }
            ],
            "name": "release",
            "nameLocation": "4346:7:38",
            "parameters": {
              "id": 35319,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 35311,
                  "mutability": "mutable",
                  "name": "_bonder",
                  "nameLocation": "4367:7:38",
                  "nodeType": "VariableDeclaration",
                  "scope": 35368,
                  "src": "4359:15:38",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 35310,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4359:7:38",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 35313,
                  "mutability": "mutable",
                  "name": "_requestId",
                  "nameLocation": "4388:10:38",
                  "nodeType": "VariableDeclaration",
                  "scope": 35368,
                  "src": "4380:18:38",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 35312,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "4380:7:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 35316,
                  "mutability": "mutable",
                  "name": "_token",
                  "nameLocation": "4411:6:38",
                  "nodeType": "VariableDeclaration",
                  "scope": 35368,
                  "src": "4404:13:38",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20_$2822",
                    "typeString": "contract IERC20"
                  },
                  "typeName": {
                    "id": 35315,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 35314,
                      "name": "IERC20",
                      "nameLocations": [
                        "4404:6:38"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 2822,
                      "src": "4404:6:38"
                    },
                    "referencedDeclaration": 2822,
                    "src": "4404:6:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20_$2822",
                      "typeString": "contract IERC20"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 35318,
                  "mutability": "mutable",
                  "name": "_amount",
                  "nameLocation": "4431:7:38",
                  "nodeType": "VariableDeclaration",
                  "scope": 35368,
                  "src": "4423:15:38",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 35317,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4423:7:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4353:89:38"
            },
            "returnParameters": {
              "id": 35327,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4519:0:38"
            },
            "scope": 35417,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 35383,
            "nodeType": "FunctionDefinition",
            "src": "4865:95:38",
            "nodes": [],
            "body": {
              "id": 35382,
              "nodeType": "Block",
              "src": "4914:46:38",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 35379,
                        "name": "_module",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 35371,
                        "src": "4947:7:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "baseExpression": {
                          "id": 35374,
                          "name": "_approvals",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 34953,
                          "src": "4920:10:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_struct$_AddressSet_$5090_storage_$",
                            "typeString": "mapping(address => struct EnumerableSet.AddressSet storage ref)"
                          }
                        },
                        "id": 35377,
                        "indexExpression": {
                          "expression": {
                            "id": 35375,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "4931:3:38",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 35376,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "4935:6:38",
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "src": "4931:10:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "4920:22:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_AddressSet_$5090_storage",
                          "typeString": "struct EnumerableSet.AddressSet storage ref"
                        }
                      },
                      "id": 35378,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "4943:3:38",
                      "memberName": "add",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 5117,
                      "src": "4920:26:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_AddressSet_$5090_storage_ptr_$_t_address_$returns$_t_bool_$attached_to$_t_struct$_AddressSet_$5090_storage_ptr_$",
                        "typeString": "function (struct EnumerableSet.AddressSet storage pointer,address) returns (bool)"
                      }
                    },
                    "id": 35380,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4920:35:38",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 35381,
                  "nodeType": "ExpressionStatement",
                  "src": "4920:35:38"
                }
              ]
            },
            "baseFunctions": [
              42564
            ],
            "documentation": {
              "id": 35369,
              "nodeType": "StructuredDocumentation",
              "src": "4826:36:38",
              "text": "@inheritdoc IAccountingExtension"
            },
            "functionSelector": "17825ef3",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "approveModule",
            "nameLocation": "4874:13:38",
            "parameters": {
              "id": 35372,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 35371,
                  "mutability": "mutable",
                  "name": "_module",
                  "nameLocation": "4896:7:38",
                  "nodeType": "VariableDeclaration",
                  "scope": 35383,
                  "src": "4888:15:38",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 35370,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4888:7:38",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4887:17:38"
            },
            "returnParameters": {
              "id": 35373,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4914:0:38"
            },
            "scope": 35417,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 35398,
            "nodeType": "FunctionDefinition",
            "src": "5003:97:38",
            "nodes": [],
            "body": {
              "id": 35397,
              "nodeType": "Block",
              "src": "5051:49:38",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 35394,
                        "name": "_module",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 35386,
                        "src": "5087:7:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "baseExpression": {
                          "id": 35389,
                          "name": "_approvals",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 34953,
                          "src": "5057:10:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_struct$_AddressSet_$5090_storage_$",
                            "typeString": "mapping(address => struct EnumerableSet.AddressSet storage ref)"
                          }
                        },
                        "id": 35392,
                        "indexExpression": {
                          "expression": {
                            "id": 35390,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "5068:3:38",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 35391,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "5072:6:38",
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "src": "5068:10:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "5057:22:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_AddressSet_$5090_storage",
                          "typeString": "struct EnumerableSet.AddressSet storage ref"
                        }
                      },
                      "id": 35393,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "5080:6:38",
                      "memberName": "remove",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 5144,
                      "src": "5057:29:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_AddressSet_$5090_storage_ptr_$_t_address_$returns$_t_bool_$attached_to$_t_struct$_AddressSet_$5090_storage_ptr_$",
                        "typeString": "function (struct EnumerableSet.AddressSet storage pointer,address) returns (bool)"
                      }
                    },
                    "id": 35395,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5057:38:38",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 35396,
                  "nodeType": "ExpressionStatement",
                  "src": "5057:38:38"
                }
              ]
            },
            "baseFunctions": [
              42570
            ],
            "documentation": {
              "id": 35384,
              "nodeType": "StructuredDocumentation",
              "src": "4964:36:38",
              "text": "@inheritdoc IAccountingExtension"
            },
            "functionSelector": "a69748b8",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "revokeModule",
            "nameLocation": "5012:12:38",
            "parameters": {
              "id": 35387,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 35386,
                  "mutability": "mutable",
                  "name": "_module",
                  "nameLocation": "5033:7:38",
                  "nodeType": "VariableDeclaration",
                  "scope": 35398,
                  "src": "5025:15:38",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 35385,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5025:7:38",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5024:17:38"
            },
            "returnParameters": {
              "id": 35388,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5051:0:38"
            },
            "scope": 35417,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 35416,
            "nodeType": "FunctionDefinition",
            "src": "5143:158:38",
            "nodes": [],
            "body": {
              "id": 35415,
              "nodeType": "Block",
              "src": "5245:56:38",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "id": 35413,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 35407,
                      "name": "_approvedModules",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 35405,
                      "src": "5251:16:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                        "typeString": "address[] memory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "expression": {
                          "baseExpression": {
                            "id": 35408,
                            "name": "_approvals",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 34953,
                            "src": "5270:10:38",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_struct$_AddressSet_$5090_storage_$",
                              "typeString": "mapping(address => struct EnumerableSet.AddressSet storage ref)"
                            }
                          },
                          "id": 35410,
                          "indexExpression": {
                            "id": 35409,
                            "name": "_user",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 35401,
                            "src": "5281:5:38",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "5270:17:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_AddressSet_$5090_storage",
                            "typeString": "struct EnumerableSet.AddressSet storage ref"
                          }
                        },
                        "id": 35411,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "5288:6:38",
                        "memberName": "values",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 5243,
                        "src": "5270:24:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_struct$_AddressSet_$5090_storage_ptr_$returns$_t_array$_t_address_$dyn_memory_ptr_$attached_to$_t_struct$_AddressSet_$5090_storage_ptr_$",
                          "typeString": "function (struct EnumerableSet.AddressSet storage pointer) view returns (address[] memory)"
                        }
                      },
                      "id": 35412,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "5270:26:38",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                        "typeString": "address[] memory"
                      }
                    },
                    "src": "5251:45:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                      "typeString": "address[] memory"
                    }
                  },
                  "id": 35414,
                  "nodeType": "ExpressionStatement",
                  "src": "5251:45:38"
                }
              ]
            },
            "baseFunctions": [
              42579
            ],
            "documentation": {
              "id": 35399,
              "nodeType": "StructuredDocumentation",
              "src": "5104:36:38",
              "text": "@inheritdoc IAccountingExtension"
            },
            "functionSelector": "96fa9e10",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "userApprovedModules",
            "nameLocation": "5152:19:38",
            "parameters": {
              "id": 35402,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 35401,
                  "mutability": "mutable",
                  "name": "_user",
                  "nameLocation": "5180:5:38",
                  "nodeType": "VariableDeclaration",
                  "scope": 35416,
                  "src": "5172:13:38",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 35400,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5172:7:38",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5171:15:38"
            },
            "returnParameters": {
              "id": 35406,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 35405,
                  "mutability": "mutable",
                  "name": "_approvedModules",
                  "nameLocation": "5227:16:38",
                  "nodeType": "VariableDeclaration",
                  "scope": 35416,
                  "src": "5210:33:38",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 35403,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "5210:7:38",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 35404,
                    "nodeType": "ArrayTypeName",
                    "src": "5210:9:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5209:35:38"
            },
            "scope": 35417,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          }
        ],
        "abstract": false,
        "baseContracts": [
          {
            "baseName": {
              "id": 34916,
              "name": "IAccountingExtension",
              "nameLocations": [
                "521:20:38"
              ],
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 42580,
              "src": "521:20:38"
            },
            "id": 34917,
            "nodeType": "InheritanceSpecifier",
            "src": "521:20:38"
          }
        ],
        "canonicalName": "AccountingExtension",
        "contractDependencies": [],
        "contractKind": "contract",
        "fullyImplemented": true,
        "linearizedBaseContracts": [
          35417,
          42580
        ],
        "name": "AccountingExtension",
        "nameLocation": "498:19:38",
        "scope": 35418,
        "usedErrors": [
          42444,
          42447,
          42450,
          42453
        ]
      }
    ],
    "license": "MIT"
  },
  "id": 38
}