WETH Gateway

If you need to use native ETH (MATIC / AVAX in case of side chain market) in the protocol, it must first be wrapped into WETH (or WMATIC / WAVAX). The WETH Gateway contract is a helper contract to easily wrap and unwrap ETH (or MATIC / AVAX) as necessary when interacting with the protocol, since only ERC20 is used within protocol interactions.

Methods

depositETH()

function depositETH(uint256 reserveId, address onBehalfOf, uint16 referralCode)

Deposits the msg.value amount of ETH into the protocol, minting the same amount of corresponding fWETH, and transferring them to the onBehalfOf address.

Ensure that the depositETH() transaction also includes the amount of ETH you are depositing in the msg.value.

Parameter Name
Type
Description

reserveId

uint256

id of the targeted lending pool reserve

onBehalfOf

address

address whom will receive the fWETH. Use msg.sender when the fTokens should be sent to the caller.

referralCode

uint16

referral code for our referral program. Use 0 for no referral.

batchDepositETH()

function batchDepositETH(uint256[] calldata reserveIds, address[] calldata onBehalfOfs, uint16[] calldata referralCodes)

Deposits the msg.value amount of ETH into the protocol, minting the same amount of corresponding fWETH, and transferring them to the onBehalfOfs addresses.

Ensure that the batchDepositETH() transaction also includes the total amount of ETH you are depositing in the msg.value.

Parameter Name
Type
Description

reserveIds

uint256[] calldata

ids of the targeted lending pool reserves

onBehalfOfs

address[] calldata

addresses whom will receive the fWETH. Use msg.sender when the fTokens should be sent to the caller.

referralCodes

uint16[] calldata

referral codes for our referral program. Use 0 for no referral.

withdrawETH()

function withdrawETH(uint256 amount, uint256 reserveId, address to)

Withdraws amount of the WETH, unwraps it to ETH, and transfers the ETH to the to address.

Ensure you set the relevant ERC20 allowance of fWETH, before calling this function, so the WETHGatewaycontract can burn the associated fWETH.

Parameter Name
Type
Description

amount

uint256

amount withdrawn, expressed in wei units. Use type(uint).max to withdraw the entire balance.

reserveId

uint256

id of the targeted lending pool reserve

to

address

address that will receive the unwrapped ETH

batchWithdrawETH()

function batchWithdrawETH(uint256[] calldata amounts, uint256[] calldata reserveIds, address[] calldata tos)

Batch withdraws amounts of the WETH, unwraps it to ETH, and transfers the ETH to the tos addresses.

Ensure you set the relevant ERC20 allowances of fWETH, before calling this function, so the WETHGatewaycontract can burn the associated fWETHs.

Parameter Name
Type
Description

amounts

uint256[] calldata

amounts withdrawn, expressed in wei units. Use type(uint).max to withdraw the entire balance.

reserveIds

uint256[] calldata

ids of the targeted lending pool reserves

tos

address[] calldata

addresses that will receive the unwrapped ETH

borrowETH()

function borrowETH(uint256 amount, uint256 tokenId, uint256 tokenValue, uint256 reserveId, uint256 duration, address onBehalfOf, uint16 referralCode)

Borrows amount of ETH, sending the amount of ETH to msg.sender.

Parameter Name
Type
Description

amount

uint256

amount to be borrowed, expressed in wei units

tokenId

uint256

tokenId of the NFT used as collateral

tokenValue

uint256

value of ERC1155 tokens collateralised, 0 if ERC721

reserveId

uint256

the id of the targeted reserve

duration

uint256

the duration of the loan, 0 if open-ended

onBehalfOf

address

addresses whom will receive the loan

referralCode

uint16

referral code for our referral program. Use 0 for no referral code.

batchBorrowETH()

function batchBorrowETH(uint256[] calldata amounts, uint256[] calldata tokenIds, uint256[] calldata tokenValues, uint256[] calldata reserveIds, uint256 duration, address onBehalfOf, uint16 referralCode)

Batch borrows amounts of ETH, sending the amounts of ETH to msg.sender. Note: distinct durations are unsupported.

Parameter Name
Type
Description

amounts

uint256[] calldata

amounts to be borrowed, expressed in wei units

tokenIds

uint256[] calldata

tokenIds of the NFT(s) used as collateral

tokenValues

uint256[] calldata

values of ERC1155 tokens collateralised, 0 if ERC721

reserveIds

uint256[] calldata

the ids of the targeted reserves

duration

uint256

the duration of the loan, 0 if open-ended

onBehalfOf

address

addresses whom will receive the loan

referralCode

uint16

referral code for our referral program. Use 0 for no referral code.

repayETH()

function repayETH(uint256 borrowId, uint256 amount)

Repays debt of a targeted borrowId an amount of ETH.

Ensure that the repayETH() transaction also includes the amount of ETH you are repaying in the msg.value.

Parameter Name
Type
Description

borrowId

uint256

id of the targeted borrow

amount

uint256

amount to be repaid, expressed in wei units.

Use type(uint256).max to repay the entire debt, ONLY when the repayment is not executed on behalf of a 3rd party.

In case of repayments on behalf of another user, it's recommended to send an amount slightly higher than the current borrowed amount.

batchRepayETH()

function batchRepayETH(uint256[] calldata borrowIds, uint256[] calldata amounts)

Batch repays debts of targeted borrowIds amounts of ETH.

Ensure that the batchRepayETH() transaction also includes the amount of ETH you are repaying in the msg.value.

Parameter Name
Type
Description

borrowIds

uint256[] calldata

ids of the targeted borrows

amounts

uint256[] calldata

amounts to be repaid, expressed in wei units.

Use type(uint256).max to repay the entire debt, ONLY when the repayment is not executed on behalf of a 3rd party.

In case of repayments on behalf of another user, it's recommended to send an amount slightly higher than the current borrowed amount.

refinanceETH()

function refinanceETH(uint256 borrowId, uint256 amount, uint256 duration)

Refinances a targeted borrowId with more or less amount of ETH, and an updated duration.

Ensure that the refinanceETH() transaction also includes the amount of ETH if you are refinancing at a lower debt level. The value sent should be the difference.

Parameter Name
Type
Description

borrowId

uint256

id of the targeted borrow

amount

uint256

new loan amount, expressed in wei units.

duration

uint256

new loan duration, from time of refinancing

batchRefinanceETH()

function batchRefinanceETH(uint256[] calldata borrowIds, uint256[] calldata amounts, uint256[] calldata durations)

Batch refinances targeted borrowIds with more or less amounts of ETH, and updated durations.

Ensure that the batchRefinanceETH() transaction also includes the amount of ETH if you are refinancing at a lower debt level(s). The value sent should be the difference.

Parameter Name
Type
Description

borrowIds

uint256[] calldata

ids of the targeted borrows

amounts

uint256[] calldata

new loan amounts, expressed in wei units.

durations

uint256[] calldata

new loan durations, from time of refinancing

bidETH()

function bidETH(address asset, uint256 amount, uint256 borrowId, address onBehalfOf)

Purchases the underlying collateral of a defaulted loan in auction.

Ensure that the loan is in default and the liquidity auction is active else this call will fail

Parameter Name
Type
Description

asset

address

address of the payment currency

amount

uint256

bid / purchase amount

borrowId

uint256

id of the targeted borrow

onBehalfOf

address

address to receive the underlying collateral

batchBidETH()

function batchBidETH(address[] calldata assets, uint256[] calldata amounts, uint256[] calldata borrowIds, address[] calldata onBehalfOfs)

Batch purchases the underlying collaterals of a defaulted loans in auction.

Ensure that the loans are in default and liquidity auctions are active else this call will fail

Parameter Name
Type
Description

assets

address[] calldata

addresses of the payment currencies

amounts

uint256[] calldata

bid / purchase amounts

borrowIds

uint256[] calldata

ids of the targeted borrows

onBehalfOfs

address[] calldata

addresses to receive the underlying collateral

View Methods

getWETHAddress()

function getWETHAddress()

Returns the WETH address used by the WETHGateway.

ABI

WETH Gateway ABI
{
  "abi": [
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "version",
          "type": "uint8"
        }
      ],
      "name": "Initialized",
      "type": "event"
    },
    {
      "stateMutability": "payable",
      "type": "fallback"
    },
    {
      "inputs": [],
      "name": "authorizeExecutionDelegate",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "assets",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "amounts",
          "type": "uint256[]"
        },
        {
          "internalType": "uint256[]",
          "name": "borrowIds",
          "type": "uint256[]"
        },
        {
          "internalType": "address[]",
          "name": "onBehalfOfs",
          "type": "address[]"
        }
      ],
      "name": "batchBidETH",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256[]",
          "name": "amounts",
          "type": "uint256[]"
        },
        {
          "internalType": "uint256[]",
          "name": "tokenIds",
          "type": "uint256[]"
        },
        {
          "internalType": "uint256[]",
          "name": "tokenValues",
          "type": "uint256[]"
        },
        {
          "internalType": "uint256[]",
          "name": "reserveIds",
          "type": "uint256[]"
        },
        {
          "internalType": "uint256",
          "name": "duration",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "onBehalfOf",
          "type": "address"
        },
        {
          "internalType": "uint16",
          "name": "referralCode",
          "type": "uint16"
        }
      ],
      "name": "batchBorrowETH",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256[]",
          "name": "amounts",
          "type": "uint256[]"
        },
        {
          "internalType": "uint256[]",
          "name": "reserveIds",
          "type": "uint256[]"
        },
        {
          "internalType": "address[]",
          "name": "onBehalfOfs",
          "type": "address[]"
        },
        {
          "internalType": "uint16[]",
          "name": "referralCodes",
          "type": "uint16[]"
        }
      ],
      "name": "batchDepositETH",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256[]",
          "name": "borrowIds",
          "type": "uint256[]"
        },
        {
          "internalType": "uint256[]",
          "name": "amounts",
          "type": "uint256[]"
        },
        {
          "internalType": "uint256[]",
          "name": "durations",
          "type": "uint256[]"
        }
      ],
      "name": "batchRefinanceETH",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256[]",
          "name": "borrowIds",
          "type": "uint256[]"
        },
        {
          "internalType": "uint256[]",
          "name": "amounts",
          "type": "uint256[]"
        }
      ],
      "name": "batchRepayETH",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256[]",
          "name": "amounts",
          "type": "uint256[]"
        },
        {
          "internalType": "uint256[]",
          "name": "reserveIds",
          "type": "uint256[]"
        },
        {
          "internalType": "address[]",
          "name": "tos",
          "type": "address[]"
        }
      ],
      "name": "batchWithdrawETH",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "asset",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "borrowId",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "onBehalfOf",
          "type": "address"
        }
      ],
      "name": "bidETH",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "tokenValue",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "reserveId",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "duration",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "onBehalfOf",
          "type": "address"
        },
        {
          "internalType": "uint16",
          "name": "referralCode",
          "type": "uint16"
        }
      ],
      "name": "borrowETH",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "reserveId",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "onBehalfOf",
          "type": "address"
        },
        {
          "internalType": "uint16",
          "name": "referralCode",
          "type": "uint16"
        }
      ],
      "name": "depositETH",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "emergencyEtherTransfer",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "emergencyTokenTransfer",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getWETHAddress",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "weth",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "addressProvider",
          "type": "address"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "borrowId",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "duration",
          "type": "uint256"
        }
      ],
      "name": "refinanceETH",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "borrowId",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "repayETH",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "reserveId",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        }
      ],
      "name": "withdrawETH",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "stateMutability": "payable",
      "type": "receive"
    }
  ],
  "bytecode": {
    "object": "0x608060405234801561001057600080fd5b50612be7806100206000396000f3fe6080604052600436106101025760003560e01c806376e13af111610095578063bba6bc6d11610064578063bba6bc6d146102ba578063caaabc60146102cd578063ced46f82146102e2578063d0fee56814610302578063eed88b8d1461032257610158565b806376e13af1146102485780637f185c1e1461025b578063a3d5b2551461026e578063affa88171461028e57610158565b8063485cc955116100d1578063485cc955146101e25780635a95399914610202578063664054ce146102155780636a41a61b1461022857610158565b80630572c30f146101895780631976c7ba1461019c57806331a9b157146101af57806335f9a701146101c257610158565b366101585760335460408051808201909152600381526238353360e81b6020820152906001600160a01b031633146101565760405162461bcd60e51b815260040161014d9190611efd565b60405180910390fd5b005b60408051808201825260038152620e0d4d60ea1b6020820152905162461bcd60e51b815261014d9190600401611efd565b610156610197366004611f30565b610342565b6101566101aa366004611fa8565b610511565b6101566101bd366004611fa8565b6106ef565b3480156101ce57600080fd5b506101566101dd3660046120a3565b610851565b3480156101ee57600080fd5b506101566101fd366004612108565b610954565b610156610210366004612141565b610a8f565b6101566102233660046121ad565b610c12565b34801561023457600080fd5b506101566102433660046121f7565b610d51565b610156610256366004612230565b610f95565b61015661026936600461226e565b611076565b34801561027a57600080fd5b50610156610289366004612290565b6111a3565b34801561029a57600080fd5b50603354604080516001600160a01b039092168252519081900360200190f35b6101566102c83660046122d1565b6112c8565b3480156102d957600080fd5b50610156611545565b3480156102ee57600080fd5b506101566102fd3660046122d1565b6116e4565b34801561030e57600080fd5b5061015661031d36600461236b565b611b81565b34801561032e57600080fd5b5061015661033d36600461245b565b611cb5565b60008061034d611d71565b6001600160a01b03166301667623866040518263ffffffff1660e01b815260040161037a91815260200190565b608060405180830381865afa158015610397573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103bb9190612492565b935050505080841115610414576103d281856124f1565b9150813410156040518060400160405280600381526020016238353160e81b815250906104125760405162461bcd60e51b815260040161014d9190611efd565b505b603360009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b15801561046457600080fd5b505af1158015610478573d6000803e3d6000fd5b5050505050610485611de4565b604051630226f8f960e11b81526004810187905260248101869052604481018590526001600160a01b03919091169063044df1f290606401600060405180830381600087803b1580156104d757600080fd5b505af11580156104eb573d6000803e3d6000fd5b505050508134111561050a5761050a3361050584346124f1565b611e2e565b5050505050565b8685146105305760405162461bcd60e51b815260040161014d9061250a565b86831461054f5760405162461bcd60e51b815260040161014d9061250a565b86811461056e5760405162461bcd60e51b815260040161014d9061250a565b6000805b888110156105b25789898281811061058c5761058c612525565b905060200201358261059e919061253b565b9150806105aa8161254e565b915050610572565b50803410156040518060400160405280600381526020016203835360ec1b815250906105f15760405162461bcd60e51b815260040161014d9190611efd565b50603360009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b15801561064257600080fd5b505af1158015610656573d6000803e3d6000fd5b5050505050610663611de4565b6001600160a01b0316634b33a9678a8a8a8a8a8a8a8a6040518963ffffffff1660e01b815260040161069c9897969594939291906125e2565b600060405180830381600087803b1580156106b657600080fd5b505af11580156106ca573d6000803e3d6000fd5b50505050803411156106e4576106e43361050583346124f1565b505050505050505050565b86851461070e5760405162461bcd60e51b815260040161014d9061250a565b86831461072d5760405162461bcd60e51b815260040161014d9061250a565b6000805b868110156107675787878281811061074b5761074b612525565b905060200201359150808061075f9061254e565b915050610731565b50803410156040518060400160405280600381526020016203835360ec1b815250906107a65760405162461bcd60e51b815260040161014d9190611efd565b50603360009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b1580156107f757600080fd5b505af115801561080b573d6000803e3d6000fd5b5050505050610818611de4565b6001600160a01b0316632684dd098a8a8a8a8a8a8a8a6040518963ffffffff1660e01b815260040161069c98979695949392919061266a565b610859611de4565b60405163138e9b5f60e31b815260048101899052602481018890526044810187905260648101869052608481018590526001600160a01b0384811660a483015261ffff841660c48301529190911690639c74daf89060e401600060405180830381600087803b1580156108cb57600080fd5b505af11580156108df573d6000803e3d6000fd5b5050603354604051632e1a7d4d60e01b8152600481018b90526001600160a01b039091169250632e1a7d4d9150602401600060405180830381600087803b15801561092957600080fd5b505af115801561093d573d6000803e3d6000fd5b5050505061094b3388611e2e565b50505050505050565b600054610100900460ff16158080156109745750600054600160ff909116105b8061098e5750303b15801561098e575060005460ff166001145b6109f15760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161014d565b6000805460ff191660011790558015610a14576000805461ff0019166101001790555b603380546001600160a01b038086166001600160a01b03199283161790925560348054928516929091169190911790558015610a8a576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b828114610aae5760405162461bcd60e51b815260040161014d9061250a565b6000805b82811015610ae857838382818110610acc57610acc612525565b9050602002013591508080610ae09061254e565b915050610ab2565b50803410156040518060400160405280600381526020016238353160e81b81525090610b275760405162461bcd60e51b815260040161014d9190611efd565b50603360009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015610b7857600080fd5b505af1158015610b8c573d6000803e3d6000fd5b5050505050610b99611de4565b6001600160a01b031663ff7039c7868686866040518563ffffffff1660e01b8152600401610bca94939291906126ca565b600060405180830381600087803b158015610be457600080fd5b505af1158015610bf8573d6000803e3d6000fd5b505050508034111561050a5761050a3361050583346124f1565b823410156040518060400160405280600381526020016203835360ec1b81525090610c505760405162461bcd60e51b815260040161014d9190611efd565b50603360009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0846040518263ffffffff1660e01b81526004016000604051808303818588803b158015610ca157600080fd5b505af1158015610cb5573d6000803e3d6000fd5b5050505050610cc2611de4565b60405163a7ff3b2360e01b81526001600160a01b03868116600483015260248201869052604482018590528381166064830152919091169063a7ff3b2390608401600060405180830381600087803b158015610d1d57600080fd5b505af1158015610d31573d6000803e3d6000fd5b5050505082341115610d4b57610d4b3361050585346124f1565b50505050565b6000610d5b611de4565b6040516377778db360e01b8152600481018590529091506000906001600160a01b038316906377778db390602401600060405180830381865afa158015610da6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610dce919081019061283b565b606001516040516370a0823160e01b81523360048201529091506000906001600160a01b038316906370a0823190602401602060405180830381865afa158015610e1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e4091906129b3565b90508560018101610e4e5750805b6040516323b872dd60e01b8152336004820152306024820152604481018290526001600160a01b038416906323b872dd906064016020604051808303816000875af1158015610ea1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ec591906129cc565b50604051630ad58d2f60e01b815260048101829052602481018790523060448201526001600160a01b03851690630ad58d2f90606401600060405180830381600087803b158015610f1557600080fd5b505af1158015610f29573d6000803e3d6000fd5b5050603354604051632e1a7d4d60e01b8152600481018590526001600160a01b039091169250632e1a7d4d9150602401600060405180830381600087803b158015610f7357600080fd5b505af1158015610f87573d6000803e3d6000fd5b5050505061094b8582611e2e565b603360009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b158015610fe557600080fd5b505af1158015610ff9573d6000803e3d6000fd5b5050505050611006611de4565b604051630ef453e160e11b8152346004820152602481018590526001600160a01b03848116604483015261ffff841660648301529190911690631de8a7c290608401600060405180830381600087803b15801561106257600080fd5b505af115801561094b573d6000803e3d6000fd5b803410156040518060400160405280600381526020016238353160e81b815250906110b45760405162461bcd60e51b815260040161014d9190611efd565b50603360009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561110557600080fd5b505af1158015611119573d6000803e3d6000fd5b5050505050611126611de4565b60405163d8aed14560e01b815260048101849052602481018390526001600160a01b03919091169063d8aed14590604401600060405180830381600087803b15801561117157600080fd5b505af1158015611185573d6000803e3d6000fd5b505050508034111561119f5761119f3361050583346124f1565b5050565b60345460408051636ee554f560e11b8152905133926001600160a01b03169163ddcaa9ea9160048083019260209291908290030181865afa1580156111ec573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061121091906129f5565b6001600160a01b031614604051806040016040528060038152602001621b981960e91b815250906112545760405162461bcd60e51b815260040161014d9190611efd565b5060405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044016020604051808303816000875af11580156112a4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4b91906129cc565b6000808685146112ea5760405162461bcd60e51b815260040161014d9061250a565b8683146113095760405162461bcd60e51b815260040161014d9061250a565b60005b8781101561140d5761131c611d71565b6001600160a01b031663016676238a8a8481811061133c5761133c612525565b905060200201356040518263ffffffff1660e01b815260040161136191815260200190565b608060405180830381865afa15801561137e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113a29190612492565b9550859250899150889050838181106113bd576113bd612525565b9050602002013511156113fb57828787838181106113dd576113dd612525565b905060200201356113ee91906124f1565b6113f8908361253b565b91505b806114058161254e565b91505061130c565b50803410156040518060400160405280600381526020016238353160e81b8152509061144c5760405162461bcd60e51b815260040161014d9190611efd565b50603360009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561149d57600080fd5b505af11580156114b1573d6000803e3d6000fd5b50505050506114be611de4565b6001600160a01b031663621759de8989898989896040518763ffffffff1660e01b81526004016114f396959493929190612a12565b600060405180830381600087803b15801561150d57600080fd5b505af1158015611521573d6000803e3d6000fd5b505050508034111561153b5761153b3361050583346124f1565b5050505050505050565b603454604080516326deb97b60e21b8152905133926001600160a01b031691639b7ae5ec9160048083019260209291908290030181865afa15801561158e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115b291906129f5565b6001600160a01b0316146040518060400160405280600381526020016203430360ec1b815250906115f65760405162461bcd60e51b815260040161014d9190611efd565b50603354603454604080516347f872f160e01b815290516001600160a01b039384169363095ea7b39316916347f872f19160048083019260209291908290030181865afa15801561164b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061166f91906129f5565b6040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260001960248201526044016020604051808303816000875af11580156116bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116e191906129cc565b50565b8483146117035760405162461bcd60e51b815260040161014d9061250a565b8481146117225760405162461bcd60e51b815260040161014d9061250a565b60008080808867ffffffffffffffff811115611740576117406126fc565b604051908082528060200260200182016040528015611769578160200160208202803683370190505b50905060008967ffffffffffffffff811115611787576117876126fc565b6040519080825280602002602001820160405280156117b0578160200160208202803683370190505b50905060006117bd611de4565b905060005b8b811015611a4957816001600160a01b03166377778db38c8c848181106117eb576117eb612525565b905060200201356040518263ffffffff1660e01b815260040161181091815260200190565b600060405180830381865afa15801561182d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611855919081019061283b565b606001516040516370a0823160e01b81523360048201529097506001600160a01b038816906370a0823190602401602060405180830381865afa1580156118a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118c491906129b3565b95508c8c828181106118d8576118d8612525565b905060200201358382815181106118f1576118f1612525565b6020026020010181815250506000198d8d8381811061191257611912612525565b905060200201350361193e578583828151811061193157611931612525565b6020026020010181815250505b82818151811061195057611950612525565b602002602001015185611963919061253b565b9450866001600160a01b03166323b872dd333086858151811061198857611988612525565b60209081029190910101516040516001600160e01b031960e086901b1681526001600160a01b03938416600482015292909116602483015260448201526064016020604051808303816000875af11580156119e7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a0b91906129cc565b5030848281518110611a1f57611a1f612525565b6001600160a01b039092166020928302919091019091015280611a418161254e565b9150506117c2565b50604051634f4bd0ab60e11b81526001600160a01b03821690639e97a15690611a7c9085908e908e908990600401612a5b565b600060405180830381600087803b158015611a9657600080fd5b505af1158015611aaa573d6000803e3d6000fd5b5050603354604051632e1a7d4d60e01b8152600481018890526001600160a01b039091169250632e1a7d4d9150602401600060405180830381600087803b158015611af457600080fd5b505af1158015611b08573d6000803e3d6000fd5b5050505060005b87811015611b7257611b60898983818110611b2c57611b2c612525565b9050602002016020810190611b419190612af6565b848381518110611b5357611b53612525565b6020026020010151611e2e565b80611b6a8161254e565b915050611b0f565b50505050505050505050505050565b611b89611de4565b6001600160a01b031663c28cadf78c8c8c8c8c8c8c8c8c8c8c6040518c63ffffffff1660e01b8152600401611bc89b9a99989796959493929190612b13565b600060405180830381600087803b158015611be257600080fd5b505af1158015611bf6573d6000803e3d6000fd5b505050506000805b8b811015611c3e578c8c82818110611c1857611c18612525565b9050602002013582611c2a919061253b565b915080611c368161254e565b915050611bfe565b50603354604051632e1a7d4d60e01b8152600481018390526001600160a01b0390911690632e1a7d4d90602401600060405180830381600087803b158015611c8557600080fd5b505af1158015611c99573d6000803e3d6000fd5b50505050611ca73382611e2e565b505050505050505050505050565b60345460408051636ee554f560e11b8152905133926001600160a01b03169163ddcaa9ea9160048083019260209291908290030181865afa158015611cfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d2291906129f5565b6001600160a01b031614604051806040016040528060038152602001621b981960e91b81525090611d665760405162461bcd60e51b815260040161014d9190611efd565b5061119f8282611e2e565b60345460408051636fd220df60e11b815290516000926001600160a01b03169163dfa441be9160048083019260209291908290030181865afa158015611dbb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ddf91906129f5565b905090565b60345460408051630261bf8b60e01b815290516000926001600160a01b031691630261bf8b9160048083019260209291908290030181865afa158015611dbb573d6000803e3d6000fd5b604080516000808252602082019092526001600160a01b038416908390604051611e589190612b95565b60006040518083038185875af1925050503d8060008114611e95576040519150601f19603f3d011682016040523d82523d6000602084013e611e9a565b606091505b5050905080604051806040016040528060038152602001621c1a9960e91b81525090610d4b5760405162461bcd60e51b815260040161014d9190611efd565b60005b83811015611ef4578181015183820152602001611edc565b50506000910152565b6020815260008251806020840152611f1c816040850160208701611ed9565b601f01601f19169190910160400192915050565b600080600060608486031215611f4557600080fd5b505081359360208301359350604090920135919050565b60008083601f840112611f6e57600080fd5b50813567ffffffffffffffff811115611f8657600080fd5b6020830191508360208260051b8501011115611fa157600080fd5b9250929050565b6000806000806000806000806080898b031215611fc457600080fd5b883567ffffffffffffffff80821115611fdc57600080fd5b611fe88c838d01611f5c565b909a50985060208b013591508082111561200157600080fd5b61200d8c838d01611f5c565b909850965060408b013591508082111561202657600080fd5b6120328c838d01611f5c565b909650945060608b013591508082111561204b57600080fd5b506120588b828c01611f5c565b999c989b5096995094979396929594505050565b6001600160a01b03811681146116e157600080fd5b803561208c8161206c565b919050565b803561ffff8116811461208c57600080fd5b600080600080600080600060e0888a0312156120be57600080fd5b873596506020880135955060408801359450606088013593506080880135925060a08801356120ec8161206c565b91506120fa60c08901612091565b905092959891949750929550565b6000806040838503121561211b57600080fd5b82356121268161206c565b915060208301356121368161206c565b809150509250929050565b6000806000806040858703121561215757600080fd5b843567ffffffffffffffff8082111561216f57600080fd5b61217b88838901611f5c565b9096509450602087013591508082111561219457600080fd5b506121a187828801611f5c565b95989497509550505050565b600080600080608085870312156121c357600080fd5b84356121ce8161206c565b9350602085013592506040850135915060608501356121ec8161206c565b939692955090935050565b60008060006060848603121561220c57600080fd5b833592506020840135915060408401356122258161206c565b809150509250925092565b60008060006060848603121561224557600080fd5b8335925060208401356122578161206c565b915061226560408501612091565b90509250925092565b6000806040838503121561228157600080fd5b50508035926020909101359150565b6000806000606084860312156122a557600080fd5b83356122b08161206c565b925060208401356122c08161206c565b929592945050506040919091013590565b600080600080600080606087890312156122ea57600080fd5b863567ffffffffffffffff8082111561230257600080fd5b61230e8a838b01611f5c565b9098509650602089013591508082111561232757600080fd5b6123338a838b01611f5c565b9096509450604089013591508082111561234c57600080fd5b5061235989828a01611f5c565b979a9699509497509295939492505050565b600080600080600080600080600080600060e08c8e03121561238c57600080fd5b67ffffffffffffffff808d3511156123a357600080fd5b6123b08e8e358f01611f5c565b909c509a5060208d01358110156123c657600080fd5b6123d68e60208f01358f01611f5c565b909a50985060408d01358110156123ec57600080fd5b6123fc8e60408f01358f01611f5c565b909850965060608d013581101561241257600080fd5b506124238d60608e01358e01611f5c565b909550935060808c0135925061243b60a08d01612081565b915061244960c08d01612091565b90509295989b509295989b9093969950565b6000806040838503121561246e57600080fd5b82356124798161206c565b946020939093013593505050565b805161208c8161206c565b600080600080608085870312156124a857600080fd5b84516124b38161206c565b6020860151604087015191955093506124cb8161206c565b6060959095015193969295505050565b634e487b7160e01b600052601160045260246000fd5b81810381811115612504576125046124db565b92915050565b6020808252600190820152606560f81b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b80820180821115612504576125046124db565b600060018201612560576125606124db565b5060010190565b81835260006001600160fb1b0383111561258057600080fd5b8260051b80836020870137939093016020019392505050565b8183526000602080850194508260005b858110156125d75781356125bc8161206c565b6001600160a01b0316875295820195908201906001016125a9565b509495945050505050565b6080815260006125f6608083018a8c612567565b60208382038185015261260a828a8c612567565b9150838203604085015261261f82888a612599565b8481036060860152858152869250810160005b868110156126595761ffff61264685612091565b1682529282019290820190600101612632565b509c9b505050505050505050505050565b60808152600061267e608083018a8c612599565b828103602084015261269181898b612567565b905082810360408401526126a6818789612567565b905082810360608401526126bb818587612599565b9b9a5050505050505050505050565b6040815260006126de604083018688612567565b82810360208401526126f1818587612567565b979650505050505050565b634e487b7160e01b600052604160045260246000fd5b604051610220810167ffffffffffffffff81118282101715612736576127366126fc565b60405290565b60006020828403121561274e57600080fd5b6040516020810181811067ffffffffffffffff82111715612771576127716126fc565b6040529151825250919050565b600082601f83011261278f57600080fd5b815167ffffffffffffffff808211156127aa576127aa6126fc565b604051601f8301601f19908116603f011681019082821181831017156127d2576127d26126fc565b816040528381528660208588010111156127eb57600080fd5b6127fc846020830160208901611ed9565b9695505050505050565b80516fffffffffffffffffffffffffffffffff8116811461208c57600080fd5b805164ffffffffff8116811461208c57600080fd5b60006020828403121561284d57600080fd5b815167ffffffffffffffff8082111561286557600080fd5b90830190610220828603121561287a57600080fd5b612882612712565b61288c868461273c565b815261289a60208401612487565b60208201526128ab60408401612487565b60408201526128bc60608401612487565b60608201526128cd60808401612487565b60808201526128de60a08401612487565b60a08201526128ef60c08401612487565b60c082015260e08301518281111561290657600080fd5b6129128782860161277e565b60e08301525061010083810151908201526101208084015190820152610140808401519082015261016080840151908201526101809150612954828401612806565b828201526101a09150612968828401612806565b828201526101c0915061297c828401612806565b828201526101e09150612990828401612806565b8282015261020091506129a4828401612826565b91810191909152949350505050565b6000602082840312156129c557600080fd5b5051919050565b6000602082840312156129de57600080fd5b815180151581146129ee57600080fd5b9392505050565b600060208284031215612a0757600080fd5b81516129ee8161206c565b606081526000612a2660608301888a612567565b8281036020840152612a39818789612567565b90508281036040840152612a4e818587612567565b9998505050505050505050565b606080825285519082018190526000906020906080840190828901845b82811015612a9457815184529284019290840190600101612a78565b50505083810382850152612aa9818789612567565b8481036040860152855180825283870192509083019060005b81811015612ae75783516001600160a01b031683529284019291840191600101612ac2565b50909998505050505050505050565b600060208284031215612b0857600080fd5b81356129ee8161206c565b60e081526000612b2760e083018d8f612567565b8281036020840152612b3a818c8e612567565b90508281036040840152612b4f818a8c612567565b90508281036060840152612b6481888a612567565b608084019690965250506001600160a01b039290921660a083015261ffff1660c09091015298975050505050505050565b60008251612ba7818460208701611ed9565b919091019291505056fea2646970667358221220ad3e0017c1ed127988062c43f47f2ece1ffefb759b508a20738251f3a9e3ce9d64736f6c63430008100033",
    "sourceMap": "1099:16876:118:-:0;;;;;;;;;;;;;;;;;;;",
    "linkReferences": {}
  },
  "deployedBytecode": {
    "object": "0x6080604052600436106101025760003560e01c806376e13af111610095578063bba6bc6d11610064578063bba6bc6d146102ba578063caaabc60146102cd578063ced46f82146102e2578063d0fee56814610302578063eed88b8d1461032257610158565b806376e13af1146102485780637f185c1e1461025b578063a3d5b2551461026e578063affa88171461028e57610158565b8063485cc955116100d1578063485cc955146101e25780635a95399914610202578063664054ce146102155780636a41a61b1461022857610158565b80630572c30f146101895780631976c7ba1461019c57806331a9b157146101af57806335f9a701146101c257610158565b366101585760335460408051808201909152600381526238353360e81b6020820152906001600160a01b031633146101565760405162461bcd60e51b815260040161014d9190611efd565b60405180910390fd5b005b60408051808201825260038152620e0d4d60ea1b6020820152905162461bcd60e51b815261014d9190600401611efd565b610156610197366004611f30565b610342565b6101566101aa366004611fa8565b610511565b6101566101bd366004611fa8565b6106ef565b3480156101ce57600080fd5b506101566101dd3660046120a3565b610851565b3480156101ee57600080fd5b506101566101fd366004612108565b610954565b610156610210366004612141565b610a8f565b6101566102233660046121ad565b610c12565b34801561023457600080fd5b506101566102433660046121f7565b610d51565b610156610256366004612230565b610f95565b61015661026936600461226e565b611076565b34801561027a57600080fd5b50610156610289366004612290565b6111a3565b34801561029a57600080fd5b50603354604080516001600160a01b039092168252519081900360200190f35b6101566102c83660046122d1565b6112c8565b3480156102d957600080fd5b50610156611545565b3480156102ee57600080fd5b506101566102fd3660046122d1565b6116e4565b34801561030e57600080fd5b5061015661031d36600461236b565b611b81565b34801561032e57600080fd5b5061015661033d36600461245b565b611cb5565b60008061034d611d71565b6001600160a01b03166301667623866040518263ffffffff1660e01b815260040161037a91815260200190565b608060405180830381865afa158015610397573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103bb9190612492565b935050505080841115610414576103d281856124f1565b9150813410156040518060400160405280600381526020016238353160e81b815250906104125760405162461bcd60e51b815260040161014d9190611efd565b505b603360009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b15801561046457600080fd5b505af1158015610478573d6000803e3d6000fd5b5050505050610485611de4565b604051630226f8f960e11b81526004810187905260248101869052604481018590526001600160a01b03919091169063044df1f290606401600060405180830381600087803b1580156104d757600080fd5b505af11580156104eb573d6000803e3d6000fd5b505050508134111561050a5761050a3361050584346124f1565b611e2e565b5050505050565b8685146105305760405162461bcd60e51b815260040161014d9061250a565b86831461054f5760405162461bcd60e51b815260040161014d9061250a565b86811461056e5760405162461bcd60e51b815260040161014d9061250a565b6000805b888110156105b25789898281811061058c5761058c612525565b905060200201358261059e919061253b565b9150806105aa8161254e565b915050610572565b50803410156040518060400160405280600381526020016203835360ec1b815250906105f15760405162461bcd60e51b815260040161014d9190611efd565b50603360009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b15801561064257600080fd5b505af1158015610656573d6000803e3d6000fd5b5050505050610663611de4565b6001600160a01b0316634b33a9678a8a8a8a8a8a8a8a6040518963ffffffff1660e01b815260040161069c9897969594939291906125e2565b600060405180830381600087803b1580156106b657600080fd5b505af11580156106ca573d6000803e3d6000fd5b50505050803411156106e4576106e43361050583346124f1565b505050505050505050565b86851461070e5760405162461bcd60e51b815260040161014d9061250a565b86831461072d5760405162461bcd60e51b815260040161014d9061250a565b6000805b868110156107675787878281811061074b5761074b612525565b905060200201359150808061075f9061254e565b915050610731565b50803410156040518060400160405280600381526020016203835360ec1b815250906107a65760405162461bcd60e51b815260040161014d9190611efd565b50603360009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b1580156107f757600080fd5b505af115801561080b573d6000803e3d6000fd5b5050505050610818611de4565b6001600160a01b0316632684dd098a8a8a8a8a8a8a8a6040518963ffffffff1660e01b815260040161069c98979695949392919061266a565b610859611de4565b60405163138e9b5f60e31b815260048101899052602481018890526044810187905260648101869052608481018590526001600160a01b0384811660a483015261ffff841660c48301529190911690639c74daf89060e401600060405180830381600087803b1580156108cb57600080fd5b505af11580156108df573d6000803e3d6000fd5b5050603354604051632e1a7d4d60e01b8152600481018b90526001600160a01b039091169250632e1a7d4d9150602401600060405180830381600087803b15801561092957600080fd5b505af115801561093d573d6000803e3d6000fd5b5050505061094b3388611e2e565b50505050505050565b600054610100900460ff16158080156109745750600054600160ff909116105b8061098e5750303b15801561098e575060005460ff166001145b6109f15760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161014d565b6000805460ff191660011790558015610a14576000805461ff0019166101001790555b603380546001600160a01b038086166001600160a01b03199283161790925560348054928516929091169190911790558015610a8a576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b828114610aae5760405162461bcd60e51b815260040161014d9061250a565b6000805b82811015610ae857838382818110610acc57610acc612525565b9050602002013591508080610ae09061254e565b915050610ab2565b50803410156040518060400160405280600381526020016238353160e81b81525090610b275760405162461bcd60e51b815260040161014d9190611efd565b50603360009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015610b7857600080fd5b505af1158015610b8c573d6000803e3d6000fd5b5050505050610b99611de4565b6001600160a01b031663ff7039c7868686866040518563ffffffff1660e01b8152600401610bca94939291906126ca565b600060405180830381600087803b158015610be457600080fd5b505af1158015610bf8573d6000803e3d6000fd5b505050508034111561050a5761050a3361050583346124f1565b823410156040518060400160405280600381526020016203835360ec1b81525090610c505760405162461bcd60e51b815260040161014d9190611efd565b50603360009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0846040518263ffffffff1660e01b81526004016000604051808303818588803b158015610ca157600080fd5b505af1158015610cb5573d6000803e3d6000fd5b5050505050610cc2611de4565b60405163a7ff3b2360e01b81526001600160a01b03868116600483015260248201869052604482018590528381166064830152919091169063a7ff3b2390608401600060405180830381600087803b158015610d1d57600080fd5b505af1158015610d31573d6000803e3d6000fd5b5050505082341115610d4b57610d4b3361050585346124f1565b50505050565b6000610d5b611de4565b6040516377778db360e01b8152600481018590529091506000906001600160a01b038316906377778db390602401600060405180830381865afa158015610da6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610dce919081019061283b565b606001516040516370a0823160e01b81523360048201529091506000906001600160a01b038316906370a0823190602401602060405180830381865afa158015610e1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e4091906129b3565b90508560018101610e4e5750805b6040516323b872dd60e01b8152336004820152306024820152604481018290526001600160a01b038416906323b872dd906064016020604051808303816000875af1158015610ea1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ec591906129cc565b50604051630ad58d2f60e01b815260048101829052602481018790523060448201526001600160a01b03851690630ad58d2f90606401600060405180830381600087803b158015610f1557600080fd5b505af1158015610f29573d6000803e3d6000fd5b5050603354604051632e1a7d4d60e01b8152600481018590526001600160a01b039091169250632e1a7d4d9150602401600060405180830381600087803b158015610f7357600080fd5b505af1158015610f87573d6000803e3d6000fd5b5050505061094b8582611e2e565b603360009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b158015610fe557600080fd5b505af1158015610ff9573d6000803e3d6000fd5b5050505050611006611de4565b604051630ef453e160e11b8152346004820152602481018590526001600160a01b03848116604483015261ffff841660648301529190911690631de8a7c290608401600060405180830381600087803b15801561106257600080fd5b505af115801561094b573d6000803e3d6000fd5b803410156040518060400160405280600381526020016238353160e81b815250906110b45760405162461bcd60e51b815260040161014d9190611efd565b50603360009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561110557600080fd5b505af1158015611119573d6000803e3d6000fd5b5050505050611126611de4565b60405163d8aed14560e01b815260048101849052602481018390526001600160a01b03919091169063d8aed14590604401600060405180830381600087803b15801561117157600080fd5b505af1158015611185573d6000803e3d6000fd5b505050508034111561119f5761119f3361050583346124f1565b5050565b60345460408051636ee554f560e11b8152905133926001600160a01b03169163ddcaa9ea9160048083019260209291908290030181865afa1580156111ec573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061121091906129f5565b6001600160a01b031614604051806040016040528060038152602001621b981960e91b815250906112545760405162461bcd60e51b815260040161014d9190611efd565b5060405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044016020604051808303816000875af11580156112a4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4b91906129cc565b6000808685146112ea5760405162461bcd60e51b815260040161014d9061250a565b8683146113095760405162461bcd60e51b815260040161014d9061250a565b60005b8781101561140d5761131c611d71565b6001600160a01b031663016676238a8a8481811061133c5761133c612525565b905060200201356040518263ffffffff1660e01b815260040161136191815260200190565b608060405180830381865afa15801561137e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113a29190612492565b9550859250899150889050838181106113bd576113bd612525565b9050602002013511156113fb57828787838181106113dd576113dd612525565b905060200201356113ee91906124f1565b6113f8908361253b565b91505b806114058161254e565b91505061130c565b50803410156040518060400160405280600381526020016238353160e81b8152509061144c5760405162461bcd60e51b815260040161014d9190611efd565b50603360009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561149d57600080fd5b505af11580156114b1573d6000803e3d6000fd5b50505050506114be611de4565b6001600160a01b031663621759de8989898989896040518763ffffffff1660e01b81526004016114f396959493929190612a12565b600060405180830381600087803b15801561150d57600080fd5b505af1158015611521573d6000803e3d6000fd5b505050508034111561153b5761153b3361050583346124f1565b5050505050505050565b603454604080516326deb97b60e21b8152905133926001600160a01b031691639b7ae5ec9160048083019260209291908290030181865afa15801561158e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115b291906129f5565b6001600160a01b0316146040518060400160405280600381526020016203430360ec1b815250906115f65760405162461bcd60e51b815260040161014d9190611efd565b50603354603454604080516347f872f160e01b815290516001600160a01b039384169363095ea7b39316916347f872f19160048083019260209291908290030181865afa15801561164b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061166f91906129f5565b6040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260001960248201526044016020604051808303816000875af11580156116bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116e191906129cc565b50565b8483146117035760405162461bcd60e51b815260040161014d9061250a565b8481146117225760405162461bcd60e51b815260040161014d9061250a565b60008080808867ffffffffffffffff811115611740576117406126fc565b604051908082528060200260200182016040528015611769578160200160208202803683370190505b50905060008967ffffffffffffffff811115611787576117876126fc565b6040519080825280602002602001820160405280156117b0578160200160208202803683370190505b50905060006117bd611de4565b905060005b8b811015611a4957816001600160a01b03166377778db38c8c848181106117eb576117eb612525565b905060200201356040518263ffffffff1660e01b815260040161181091815260200190565b600060405180830381865afa15801561182d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611855919081019061283b565b606001516040516370a0823160e01b81523360048201529097506001600160a01b038816906370a0823190602401602060405180830381865afa1580156118a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118c491906129b3565b95508c8c828181106118d8576118d8612525565b905060200201358382815181106118f1576118f1612525565b6020026020010181815250506000198d8d8381811061191257611912612525565b905060200201350361193e578583828151811061193157611931612525565b6020026020010181815250505b82818151811061195057611950612525565b602002602001015185611963919061253b565b9450866001600160a01b03166323b872dd333086858151811061198857611988612525565b60209081029190910101516040516001600160e01b031960e086901b1681526001600160a01b03938416600482015292909116602483015260448201526064016020604051808303816000875af11580156119e7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a0b91906129cc565b5030848281518110611a1f57611a1f612525565b6001600160a01b039092166020928302919091019091015280611a418161254e565b9150506117c2565b50604051634f4bd0ab60e11b81526001600160a01b03821690639e97a15690611a7c9085908e908e908990600401612a5b565b600060405180830381600087803b158015611a9657600080fd5b505af1158015611aaa573d6000803e3d6000fd5b5050603354604051632e1a7d4d60e01b8152600481018890526001600160a01b039091169250632e1a7d4d9150602401600060405180830381600087803b158015611af457600080fd5b505af1158015611b08573d6000803e3d6000fd5b5050505060005b87811015611b7257611b60898983818110611b2c57611b2c612525565b9050602002016020810190611b419190612af6565b848381518110611b5357611b53612525565b6020026020010151611e2e565b80611b6a8161254e565b915050611b0f565b50505050505050505050505050565b611b89611de4565b6001600160a01b031663c28cadf78c8c8c8c8c8c8c8c8c8c8c6040518c63ffffffff1660e01b8152600401611bc89b9a99989796959493929190612b13565b600060405180830381600087803b158015611be257600080fd5b505af1158015611bf6573d6000803e3d6000fd5b505050506000805b8b811015611c3e578c8c82818110611c1857611c18612525565b9050602002013582611c2a919061253b565b915080611c368161254e565b915050611bfe565b50603354604051632e1a7d4d60e01b8152600481018390526001600160a01b0390911690632e1a7d4d90602401600060405180830381600087803b158015611c8557600080fd5b505af1158015611c99573d6000803e3d6000fd5b50505050611ca73382611e2e565b505050505050505050505050565b60345460408051636ee554f560e11b8152905133926001600160a01b03169163ddcaa9ea9160048083019260209291908290030181865afa158015611cfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d2291906129f5565b6001600160a01b031614604051806040016040528060038152602001621b981960e91b81525090611d665760405162461bcd60e51b815260040161014d9190611efd565b5061119f8282611e2e565b60345460408051636fd220df60e11b815290516000926001600160a01b03169163dfa441be9160048083019260209291908290030181865afa158015611dbb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ddf91906129f5565b905090565b60345460408051630261bf8b60e01b815290516000926001600160a01b031691630261bf8b9160048083019260209291908290030181865afa158015611dbb573d6000803e3d6000fd5b604080516000808252602082019092526001600160a01b038416908390604051611e589190612b95565b60006040518083038185875af1925050503d8060008114611e95576040519150601f19603f3d011682016040523d82523d6000602084013e611e9a565b606091505b5050905080604051806040016040528060038152602001621c1a9960e91b81525090610d4b5760405162461bcd60e51b815260040161014d9190611efd565b60005b83811015611ef4578181015183820152602001611edc565b50506000910152565b6020815260008251806020840152611f1c816040850160208701611ed9565b601f01601f19169190910160400192915050565b600080600060608486031215611f4557600080fd5b505081359360208301359350604090920135919050565b60008083601f840112611f6e57600080fd5b50813567ffffffffffffffff811115611f8657600080fd5b6020830191508360208260051b8501011115611fa157600080fd5b9250929050565b6000806000806000806000806080898b031215611fc457600080fd5b883567ffffffffffffffff80821115611fdc57600080fd5b611fe88c838d01611f5c565b909a50985060208b013591508082111561200157600080fd5b61200d8c838d01611f5c565b909850965060408b013591508082111561202657600080fd5b6120328c838d01611f5c565b909650945060608b013591508082111561204b57600080fd5b506120588b828c01611f5c565b999c989b5096995094979396929594505050565b6001600160a01b03811681146116e157600080fd5b803561208c8161206c565b919050565b803561ffff8116811461208c57600080fd5b600080600080600080600060e0888a0312156120be57600080fd5b873596506020880135955060408801359450606088013593506080880135925060a08801356120ec8161206c565b91506120fa60c08901612091565b905092959891949750929550565b6000806040838503121561211b57600080fd5b82356121268161206c565b915060208301356121368161206c565b809150509250929050565b6000806000806040858703121561215757600080fd5b843567ffffffffffffffff8082111561216f57600080fd5b61217b88838901611f5c565b9096509450602087013591508082111561219457600080fd5b506121a187828801611f5c565b95989497509550505050565b600080600080608085870312156121c357600080fd5b84356121ce8161206c565b9350602085013592506040850135915060608501356121ec8161206c565b939692955090935050565b60008060006060848603121561220c57600080fd5b833592506020840135915060408401356122258161206c565b809150509250925092565b60008060006060848603121561224557600080fd5b8335925060208401356122578161206c565b915061226560408501612091565b90509250925092565b6000806040838503121561228157600080fd5b50508035926020909101359150565b6000806000606084860312156122a557600080fd5b83356122b08161206c565b925060208401356122c08161206c565b929592945050506040919091013590565b600080600080600080606087890312156122ea57600080fd5b863567ffffffffffffffff8082111561230257600080fd5b61230e8a838b01611f5c565b9098509650602089013591508082111561232757600080fd5b6123338a838b01611f5c565b9096509450604089013591508082111561234c57600080fd5b5061235989828a01611f5c565b979a9699509497509295939492505050565b600080600080600080600080600080600060e08c8e03121561238c57600080fd5b67ffffffffffffffff808d3511156123a357600080fd5b6123b08e8e358f01611f5c565b909c509a5060208d01358110156123c657600080fd5b6123d68e60208f01358f01611f5c565b909a50985060408d01358110156123ec57600080fd5b6123fc8e60408f01358f01611f5c565b909850965060608d013581101561241257600080fd5b506124238d60608e01358e01611f5c565b909550935060808c0135925061243b60a08d01612081565b915061244960c08d01612091565b90509295989b509295989b9093969950565b6000806040838503121561246e57600080fd5b82356124798161206c565b946020939093013593505050565b805161208c8161206c565b600080600080608085870312156124a857600080fd5b84516124b38161206c565b6020860151604087015191955093506124cb8161206c565b6060959095015193969295505050565b634e487b7160e01b600052601160045260246000fd5b81810381811115612504576125046124db565b92915050565b6020808252600190820152606560f81b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b80820180821115612504576125046124db565b600060018201612560576125606124db565b5060010190565b81835260006001600160fb1b0383111561258057600080fd5b8260051b80836020870137939093016020019392505050565b8183526000602080850194508260005b858110156125d75781356125bc8161206c565b6001600160a01b0316875295820195908201906001016125a9565b509495945050505050565b6080815260006125f6608083018a8c612567565b60208382038185015261260a828a8c612567565b9150838203604085015261261f82888a612599565b8481036060860152858152869250810160005b868110156126595761ffff61264685612091565b1682529282019290820190600101612632565b509c9b505050505050505050505050565b60808152600061267e608083018a8c612599565b828103602084015261269181898b612567565b905082810360408401526126a6818789612567565b905082810360608401526126bb818587612599565b9b9a5050505050505050505050565b6040815260006126de604083018688612567565b82810360208401526126f1818587612567565b979650505050505050565b634e487b7160e01b600052604160045260246000fd5b604051610220810167ffffffffffffffff81118282101715612736576127366126fc565b60405290565b60006020828403121561274e57600080fd5b6040516020810181811067ffffffffffffffff82111715612771576127716126fc565b6040529151825250919050565b600082601f83011261278f57600080fd5b815167ffffffffffffffff808211156127aa576127aa6126fc565b604051601f8301601f19908116603f011681019082821181831017156127d2576127d26126fc565b816040528381528660208588010111156127eb57600080fd5b6127fc846020830160208901611ed9565b9695505050505050565b80516fffffffffffffffffffffffffffffffff8116811461208c57600080fd5b805164ffffffffff8116811461208c57600080fd5b60006020828403121561284d57600080fd5b815167ffffffffffffffff8082111561286557600080fd5b90830190610220828603121561287a57600080fd5b612882612712565b61288c868461273c565b815261289a60208401612487565b60208201526128ab60408401612487565b60408201526128bc60608401612487565b60608201526128cd60808401612487565b60808201526128de60a08401612487565b60a08201526128ef60c08401612487565b60c082015260e08301518281111561290657600080fd5b6129128782860161277e565b60e08301525061010083810151908201526101208084015190820152610140808401519082015261016080840151908201526101809150612954828401612806565b828201526101a09150612968828401612806565b828201526101c0915061297c828401612806565b828201526101e09150612990828401612806565b8282015261020091506129a4828401612826565b91810191909152949350505050565b6000602082840312156129c557600080fd5b5051919050565b6000602082840312156129de57600080fd5b815180151581146129ee57600080fd5b9392505050565b600060208284031215612a0757600080fd5b81516129ee8161206c565b606081526000612a2660608301888a612567565b8281036020840152612a39818789612567565b90508281036040840152612a4e818587612567565b9998505050505050505050565b606080825285519082018190526000906020906080840190828901845b82811015612a9457815184529284019290840190600101612a78565b50505083810382850152612aa9818789612567565b8481036040860152855180825283870192509083019060005b81811015612ae75783516001600160a01b031683529284019291840191600101612ac2565b50909998505050505050505050565b600060208284031215612b0857600080fd5b81356129ee8161206c565b60e081526000612b2760e083018d8f612567565b8281036020840152612b3a818c8e612567565b90508281036040840152612b4f818a8c612567565b90508281036060840152612b6481888a612567565b608084019690965250506001600160a01b039290921660a083015261ffff1660c09091015298975050505050505050565b60008251612ba7818460208701611ed9565b919091019291505056fea2646970667358221220ad3e0017c1ed127988062c43f47f2ece1ffefb759b508a20738251f3a9e3ce9d64736f6c63430008100033",
    "sourceMap": "1099:16876:118:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17792:4;;17799:29;;;;;;;;;;;;-1:-1:-1;;;17799:29:118;;;;;-1:-1:-1;;;;;17792:4:118;17770:10;:27;17762:67;;;;-1:-1:-1;;;17762:67:118;;;;;;;;:::i;:::-;;;;;;;;;;1099:16876;17935:30;;;;;;;;;;;-1:-1:-1;;;17935:30:118;;;;17928:38;;-1:-1:-1;;;17928:38:118;;;;17935:30;17928:38;;;:::i;11795:721::-;;;;;;:::i;:::-;;:::i;3535:882::-;;;;;;:::i;:::-;;:::i;14988:792::-;;;;;;:::i;:::-;;:::i;7847:521::-;;;;;;;;;;-1:-1:-1;7847:521:118;;;;;:::i;:::-;;:::i;1642:175::-;;;;;;;;;;-1:-1:-1;1642:175:118;;;;;:::i;:::-;;:::i;10804:647::-;;;;;;:::i;:::-;;:::i;14187:471::-;;;;;;:::i;:::-;;:::i;4680:771::-;;;;;;;;;;-1:-1:-1;4680:771:118;;;;;:::i;:::-;;:::i;2792:268::-;;;;;;:::i;:::-;;:::i;10090:407::-;;;;;;:::i;:::-;;:::i;16413:184::-;;;;;;;;;;-1:-1:-1;16413:184:118;;;;;:::i;:::-;;:::i;17102:95::-;;;;;;;;;;-1:-1:-1;17185:4:118;;17102:95;;;-1:-1:-1;;;;;17185:4:118;;;8628:51:174;;17102:95:118;;;;;8616:2:174;17102:95:118;;;12878:1000;;;;;;:::i;:::-;;:::i;2227:153::-;;;;;;;;;;;;;:::i;5728:1435::-;;;;;;;;;;-1:-1:-1;5728:1435:118;;;;;:::i;:::-;;:::i;9070:724::-;;;;;;;;;;-1:-1:-1;9070:724:118;;;;;:::i;:::-;;:::i;16900:133::-;;;;;;;;;;-1:-1:-1;16900:133:118;;;;;:::i;:::-;;:::i;11795:721::-;11935:23;11973:20;11997:23;:21;:23::i;:::-;-1:-1:-1;;;;;11997:39:118;;12037:8;11997:49;;;;;;;;;;;;;12931:25:174;;12919:2;12904:18;;12785:177;11997:49:118;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11969:77;;;;;12069:12;12060:6;:21;12056:194;;;12115:21;12124:12;12115:6;:21;:::i;:::-;12097:39;;12171:15;12158:9;:28;;12188:50;;;;;;;;;;;;;-1:-1:-1;;;12188:50:118;;;12150:89;;;;;-1:-1:-1;;;12150:89:118;;;;;;;;:::i;:::-;;12056:194;12268:4;;;;;;;;;-1:-1:-1;;;;;12268:4:118;-1:-1:-1;;;;;12268:12:118;;12288:15;12268:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12316:17;:15;:17::i;:::-;:55;;-1:-1:-1;;;12316:55:118;;;;;14090:25:174;;;14131:18;;;14124:34;;;14174:18;;;14167:34;;;-1:-1:-1;;;;;12316:27:118;;;;;;;14063:18:174;;12316:55:118;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12435:15;12423:9;:27;12419:90;;;12452:57;12469:10;12481:27;12493:15;12481:9;:27;:::i;:::-;12452:16;:57::i;:::-;11925:591;;11795:721;;;:::o;3535:882::-;3766:35;;;3758:49;;;;-1:-1:-1;;;3758:49:118;;;;;;;:::i;:::-;3825:36;;;3817:50;;;;-1:-1:-1;;;3817:50:118;;;;;;;:::i;:::-;3885:38;;;3877:52;;;;-1:-1:-1;;;3877:52:118;;;;;;;:::i;:::-;3940:19;3974:6;3969:88;3982:18;;;3969:88;;;4036:7;;4044:1;4036:10;;;;;;;:::i;:::-;;;;;;;4021:25;;;;;:::i;:::-;;-1:-1:-1;4002:3:118;;;;:::i;:::-;;;;3969:88;;;;4087:11;4074:9;:24;;4100:48;;;;;;;;;;;;;-1:-1:-1;;;4100:48:118;;;4066:83;;;;;-1:-1:-1;;;4066:83:118;;;;;;;;:::i;:::-;;4159:4;;;;;;;;;-1:-1:-1;;;;;4159:4:118;-1:-1:-1;;;;;4159:12:118;;4179:9;4159:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4201:17;:15;:17::i;:::-;-1:-1:-1;;;;;4201:30:118;;4232:7;;4241:10;;4253:11;;4266:13;;4201:79;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4344:11;4332:9;:23;4328:82;;;4357:53;4374:10;4386:23;4398:11;4386:9;:23;:::i;4357:53::-;3748:669;3535:882;;;;;;;;:::o;14988:792::-;15208:31;;;15200:45;;;;-1:-1:-1;;;15200:45:118;;;;;;;:::i;:::-;15263:33;;;15255:47;;;;-1:-1:-1;;;15255:47:118;;;;;;;:::i;:::-;15313:19;15347:6;15342:87;15355:18;;;15342:87;;;15408:7;;15416:1;15408:10;;;;;;;:::i;:::-;;;;;;;15394:24;;15375:3;;;;;:::i;:::-;;;;15342:87;;;;15460:11;15447:9;:24;;15473:48;;;;;;;;;;;;;-1:-1:-1;;;15473:48:118;;;15439:83;;;;;-1:-1:-1;;;15439:83:118;;;;;;;;:::i;:::-;;15532:4;;;;;;;;;-1:-1:-1;;;;;15532:4:118;-1:-1:-1;;;;;15532:12:118;;15552:11;15532:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15576:17;:15;:17::i;:::-;-1:-1:-1;;;;;15576:26:118;;15603:6;;15611:7;;15620:9;;15631:11;;15576:67;;;;;;;;;;;;;;;;;;;;;;:::i;7847:521::-;8090:17;:15;:17::i;:::-;:194;;-1:-1:-1;;;8090:194:118;;;;;18375:25:174;;;18416:18;;;18409:34;;;18459:18;;;18452:34;;;18502:18;;;18495:34;;;18545:19;;;18538:35;;;-1:-1:-1;;;;;18610:32:174;;;18589:19;;;18582:61;18692:6;18680:19;;18659;;;18652:48;8090:24:118;;;;;;;18347:19:174;;8090:194:118;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;8294:4:118;;:21;;-1:-1:-1;;;8294:21:118;;;;;12931:25:174;;;-1:-1:-1;;;;;8294:4:118;;;;-1:-1:-1;8294:13:118;;-1:-1:-1;12904:18:174;;8294:21:118;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8325:36;8342:10;8354:6;8325:16;:36::i;:::-;7847:521;;;;;;;:::o;1642:175::-;3268:19:18;3291:13;;;;;;3290:14;;3336:34;;;;-1:-1:-1;3354:12:18;;3369:1;3354:12;;;;:16;3336:34;3335:108;;;-1:-1:-1;3415:4:18;1476:19:32;:23;;;3376:66:18;;-1:-1:-1;3425:12:18;;;;;:17;3376:66;3314:201;;;;-1:-1:-1;;;3314:201:18;;18913:2:174;3314:201:18;;;18895:21:174;18952:2;18932:18;;;18925:30;18991:34;18971:18;;;18964:62;-1:-1:-1;;;19042:18:174;;;19035:44;19096:19;;3314:201:18;18711:410:174;3314:201:18;3525:12;:16;;-1:-1:-1;;3525:16:18;3540:1;3525:16;;;3551:65;;;;3585:13;:20;;-1:-1:-1;;3585:20:18;;;;;3551:65;1730:4:118::1;:18:::0;;-1:-1:-1;;;;;1730:18:118;;::::1;-1:-1:-1::0;;;;;;1730:18:118;;::::1;;::::0;;;1758:16:::1;:52:::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;3636:99:18;;;;3686:5;3670:21;;-1:-1:-1;;3670:21:18;;;3710:14;;-1:-1:-1;19278:36:174;;3710:14:18;;19266:2:174;19251:18;3710:14:18;;;;;;;3636:99;3258:483;1642:175:118;;:::o;10804:647::-;10951:34;;;10943:48;;;;-1:-1:-1;;;10943:48:118;;;;;;;:::i;:::-;11002:19;11036:6;11031:87;11044:18;;;11031:87;;;11097:7;;11105:1;11097:10;;;;;;;:::i;:::-;;;;;;;11083:24;;11064:3;;;;;:::i;:::-;;;;11031:87;;;;11148:11;11135:9;:24;;11161:50;;;;;;;;;;;;;-1:-1:-1;;;11161:50:118;;;11127:85;;;;;-1:-1:-1;;;11127:85:118;;;;;;;;:::i;:::-;;11222:4;;;;;;;;;-1:-1:-1;;;;;11222:4:118;-1:-1:-1;;;;;11222:12:118;;11242:11;11222:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11266:17;:15;:17::i;:::-;-1:-1:-1;;;;;11266:28:118;;11295:9;;11306:7;;11266:48;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11378:11;11366:9;:23;11362:82;;;11391:53;11408:10;11420:23;11432:11;11420:9;:23;:::i;14187:471::-;14367:6;14354:9;:19;;14375:48;;;;;;;;;;;;;-1:-1:-1;;;14375:48:118;;;14346:78;;;;;-1:-1:-1;;;14346:78:118;;;;;;;;:::i;:::-;;14434:4;;;;;;;;;-1:-1:-1;;;;;14434:4:118;-1:-1:-1;;;;;14434:12:118;;14454:6;14434:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14473:17;:15;:17::i;:::-;:58;;-1:-1:-1;;;14473:58:118;;-1:-1:-1;;;;;20136:15:174;;;14473:58:118;;;20118:34:174;20168:18;;;20161:34;;;20211:18;;;20204:34;;;20274:15;;;20254:18;;;20247:43;14473:21:118;;;;;;;20052:19:174;;14473:58:118;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14595:6;14583:9;:18;14579:72;;;14603:48;14620:10;14632:18;14644:6;14632:9;:18;:::i;14603:48::-;14187:471;;;;:::o;4680:771::-;4806:23;4832:17;:15;:17::i;:::-;4883:32;;-1:-1:-1;;;4883:32:118;;;;;12931:25:174;;;4806:43:118;;-1:-1:-1;4859:13:118;;-1:-1:-1;;;;;4883:21:118;;;;;12904:18:174;;4883:32:118;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4883:32:118;;;;;;;;;;;;:::i;:::-;:46;;;4962:27;;-1:-1:-1;;;4962:27:118;;4978:10;4962:27;;;8628:51:174;4883:46:118;;-1:-1:-1;4940:19:118;;-1:-1:-1;;;;;4962:15:118;;;;;8601:18:174;;4962:27:118;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4940:49;-1:-1:-1;5026:6:118;5126:27;;;5122:88;;-1:-1:-1;5188:11:118;5122:88;5219:63;;-1:-1:-1;;;5219:63:118;;5238:10;5219:63;;;24590:34:174;5258:4:118;24640:18:174;;;24633:43;24692:18;;;24685:34;;;-1:-1:-1;;;;;5219:18:118;;;;;24525::174;;5219:63:118;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;5292:63:118;;-1:-1:-1;;;5292:63:118;;;;;25214:25:174;;;25255:18;;;25248:34;;;5349:4:118;25298:18:174;;;25291:60;-1:-1:-1;;;;;5292:19:118;;;;;25187:18:174;;5292:63:118;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;5365:4:118;;:31;;-1:-1:-1;;;5365:31:118;;;;;12931:25:174;;;-1:-1:-1;;;;;5365:4:118;;;;-1:-1:-1;5365:13:118;;-1:-1:-1;12904:18:174;;5365:31:118;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5406:38;5423:2;5427:16;5406;:38::i;2792:268::-;2938:4;;;;;;;;;-1:-1:-1;;;;;2938:4:118;-1:-1:-1;;;;;2938:12:118;;2958:9;2938:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2980:17;:15;:17::i;:::-;:73;;-1:-1:-1;;;2980:73:118;;3006:9;2980:73;;;25591:25:174;25632:18;;;25625:34;;;-1:-1:-1;;;;;25695:32:174;;;25675:18;;;25668:60;25776:6;25764:19;;25744:18;;;25737:47;2980:25:118;;;;;;;25563:19:174;;2980:73:118;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10090:407;10221:6;10208:9;:19;;10229:50;;;;;;;;;;;;;-1:-1:-1;;;10229:50:118;;;10200:80;;;;;-1:-1:-1;;;10200:80:118;;;;;;;;:::i;:::-;;10290:4;;;;;;;;;-1:-1:-1;;;;;10290:4:118;-1:-1:-1;;;;;10290:12:118;;10310:6;10290:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10329:17;:15;:17::i;:::-;:41;;-1:-1:-1;;;10329:41:118;;;;;25969:25:174;;;26010:18;;;26003:34;;;-1:-1:-1;;;;;10329:23:118;;;;;;;25942:18:174;;10329:41:118;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10434:6;10422:9;:18;10418:72;;;10442:48;10459:10;10471:18;10483:6;10471:9;:18;:::i;10442:48::-;10090:407;;:::o;16413:184::-;2025:16;;:36;;;-1:-1:-1;;;2025:36:118;;;;929:10:33;;-1:-1:-1;;;;;2025:16:118;;:34;;:36;;;;;;;;;;;;;;:16;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;2025:52:118;;2079:37;;;;;;;;;;;;;-1:-1:-1;;;2079:37:118;;;2017:100;;;;;-1:-1:-1;;;2017:100:118;;;;;;;;:::i;:::-;-1:-1:-1;16556:34:118::1;::::0;-1:-1:-1;;;16556:34:118;;-1:-1:-1;;;;;26496:32:174;;;16556:34:118::1;::::0;::::1;26478:51:174::0;26545:18;;;26538:34;;;16556:22:118;::::1;::::0;::::1;::::0;26451:18:174;;16556:34:118::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;12878:1000::-:0;13059:20;;13131:34;;;13123:48;;;;-1:-1:-1;;;13123:48:118;;;;;;;:::i;:::-;13189:36;;;13181:50;;;;-1:-1:-1;;;13181:50:118;;;;;;;:::i;:::-;13247:6;13242:263;13259:20;;;13242:263;;;13320:23;:21;:23::i;:::-;-1:-1:-1;;;;;13320:39:118;;13360:9;;13370:1;13360:12;;;;;;;:::i;:::-;;;;;;;13320:53;;;;;;;;;;;;;12931:25:174;;12919:2;12904:18;;12785:177;13320:53:118;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13300:73;-1:-1:-1;13300:73:118;;-1:-1:-1;13391:7:118;;-1:-1:-1;13391:7:118;;-1:-1:-1;13399:1:118;13391:10;;;;;;;:::i;:::-;;;;;;;:25;13387:108;;;13468:12;13455:7;;13463:1;13455:10;;;;;;;:::i;:::-;;;;;;;:25;;;;:::i;:::-;13436:44;;;;:::i;:::-;;;13387:108;13281:3;;;;:::i;:::-;;;;13242:263;;;;13535:15;13522:9;:28;;13552:50;;;;;;;;;;;;;-1:-1:-1;;;13552:50:118;;;13514:89;;;;;-1:-1:-1;;;13514:89:118;;;;;;;;:::i;:::-;;13622:4;;;;;;;;;-1:-1:-1;;;;;13622:4:118;-1:-1:-1;;;;;13622:12:118;;13642:15;13622:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13670:17;:15;:17::i;:::-;-1:-1:-1;;;;;13670:32:118;;13703:9;;13714:7;;13723:9;;13670:63;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13797:15;13785:9;:27;13781:90;;;13814:57;13831:10;13843:27;13855:15;13843:9;:27;:::i;13814:57::-;13049:829;;12878:1000;;;;;;:::o;2227:153::-;1869:16;;:34;;;-1:-1:-1;;;1869:34:118;;;;929:10:33;;-1:-1:-1;;;;;1869:16:118;;:32;;:34;;;;;;;;;;;;;;:16;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1869:50:118;;1921:33;;;;;;;;;;;;;-1:-1:-1;;;1921:33:118;;;1861:94;;;;;-1:-1:-1;;;1861:94:118;;;;;;;;:::i;:::-;-1:-1:-1;2301:4:118::1;::::0;2314:16:::1;::::0;:39:::1;::::0;;-1:-1:-1;;;2314:39:118;;;;-1:-1:-1;;;;;2301:4:118;;::::1;::::0;:12:::1;::::0;2314:16:::1;::::0;:37:::1;::::0;:39:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;:16;:39:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2301:72;::::0;-1:-1:-1;;;;;;2301:72:118::1;::::0;;;;;;-1:-1:-1;;;;;26496:32:174;;;2301:72:118::1;::::0;::::1;26478:51:174::0;-1:-1:-1;;26545:18:174;;;26538:34;26451:18;;2301:72:118::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;2227:153::o:0;5728:1435::-;5903:35;;;5895:49;;;;-1:-1:-1;;;5895:49:118;;;;;;;:::i;:::-;5962:28;;;5954:42;;;;-1:-1:-1;;;5954:42:118;;;;;;;:::i;:::-;6015:13;;;;6147:7;6133:29;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6133:29:118;-1:-1:-1;6109:53:118;-1:-1:-1;6172:33:118;6222:7;6208:29;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6208:29:118;;6172:65;;6256:23;6282:17;:15;:17::i;:::-;6256:43;;6315:6;6310:611;6327:18;;;6310:611;;;6382:10;-1:-1:-1;;;;;6382:21:118;;6404:10;;6415:1;6404:13;;;;;;;:::i;:::-;;;;;;;6382:36;;;;;;;;;;;;;12931:25:174;;12919:2;12904:18;;12785:177;6382:36:118;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;6382:36:118;;;;;;;;;;;;:::i;:::-;:50;;;6461:27;;-1:-1:-1;;;6461:27:118;;6477:10;6461:27;;;8628:51:174;6382:50:118;;-1:-1:-1;;;;;;6461:15:118;;;;;8601:18:174;;6461:27:118;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6447:41;;6524:7;;6532:1;6524:10;;;;;;;:::i;:::-;;;;;;;6502:16;6519:1;6502:19;;;;;;;;:::i;:::-;;;;;;:32;;;;;-1:-1:-1;;6636:7:118;;6644:1;6636:10;;;;;;;:::i;:::-;;;;;;;:31;6632:103;;6709:11;6687:16;6704:1;6687:19;;;;;;;;:::i;:::-;;;;;;:33;;;;;6632:103;6773:16;6790:1;6773:19;;;;;;;;:::i;:::-;;;;;;;6748:44;;;;;:::i;:::-;;;6807:5;-1:-1:-1;;;;;6807:18:118;;6826:10;6846:4;6853:16;6870:1;6853:19;;;;;;;;:::i;:::-;;;;;;;;;;;6807:66;;-1:-1:-1;;;;;;6807:66:118;;;;;;;-1:-1:-1;;;;;24608:15:174;;;6807:66:118;;;24590:34:174;24660:15;;;;24640:18;;;24633:43;24692:18;;;24685:34;24525:18;;6807:66:118;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;6905:4;6887;6892:1;6887:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;6887:23:118;;;:7;;;;;;;;;;;:23;6347:3;;;;:::i;:::-;;;;6310:611;;;-1:-1:-1;6931:60:118;;-1:-1:-1;;;6931:60:118;;-1:-1:-1;;;;;6931:24:118;;;;;:60;;6956:16;;6974:10;;;;6986:4;;6931:60;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;7001:4:118;;:36;;-1:-1:-1;;;7001:36:118;;;;;12931:25:174;;;-1:-1:-1;;;;;7001:4:118;;;;-1:-1:-1;7001:13:118;;-1:-1:-1;12904:18:174;;7001:36:118;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7053:6;7048:108;7065:14;;;7048:108;;;7100:45;7117:3;;7121:1;7117:6;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;7125:16;7142:1;7125:19;;;;;;;;:::i;:::-;;;;;;;7100:16;:45::i;:::-;7081:3;;;;:::i;:::-;;;;7048:108;;;;5885:1278;;;;;;5728:1435;;;;;;:::o;9070:724::-;9369:17;:15;:17::i;:::-;-1:-1:-1;;;;;9369:29:118;;9412:7;;9433:8;;9455:11;;9480:10;;9504:8;9526:10;9550:12;9369:203;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9583:19;9618:6;9613:88;9626:18;;;9613:88;;;9680:7;;9688:1;9680:10;;;;;;;:::i;:::-;;;;;;;9665:25;;;;;:::i;:::-;;-1:-1:-1;9646:3:118;;;;:::i;:::-;;;;9613:88;;;-1:-1:-1;9710:4:118;;:26;;-1:-1:-1;;;9710:26:118;;;;;12931:25:174;;;-1:-1:-1;;;;;9710:4:118;;;;:13;;12904:18:174;;9710:26:118;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9746:41;9763:10;9775:11;9746:16;:41::i;:::-;9353:441;9070:724;;;;;;;;;;;:::o;16900:133::-;2025:16;;:36;;;-1:-1:-1;;;2025:36:118;;;;929:10:33;;-1:-1:-1;;;;;2025:16:118;;:34;;:36;;;;;;;;;;;;;;:16;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;2025:52:118;;2079:37;;;;;;;;;;;;;-1:-1:-1;;;2079:37:118;;;2017:100;;;;;-1:-1:-1;;;2017:100:118;;;;;;;;:::i;:::-;;16998:28:::1;17015:2;17019:6;16998:16;:28::i;17425:160::-:0;17537:16;;:39;;;-1:-1:-1;;;17537:39:118;;;;17481:18;;-1:-1:-1;;;;;17537:16:118;;:37;;:39;;;;;;;;;;;;;;:16;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17511:66;;17425:160;:::o;17244:136::-;17338:16;;:33;;;-1:-1:-1;;;17338:33:118;;;;17294:12;;-1:-1:-1;;;;;17338:16:118;;:31;;:33;;;;;;;;;;;;;;:16;:33;;;;;;;;;;;;;;15940:190;16053:12;;;16013;16053;;;;;;;;;-1:-1:-1;;;;;16031:7:118;;;16046:5;;16031:35;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16012:54;;;16084:7;16093:29;;;;;;;;;;;;;-1:-1:-1;;;16093:29:118;;;16076:47;;;;;-1:-1:-1;;;16076:47:118;;;;;;;;:::i;14:250:174:-;99:1;109:113;123:6;120:1;117:13;109:113;;;199:11;;;193:18;180:11;;;173:39;145:2;138:10;109:113;;;-1:-1:-1;;256:1:174;238:16;;231:27;14:250::o;269:396::-;418:2;407:9;400:21;381:4;450:6;444:13;493:6;488:2;477:9;473:18;466:34;509:79;581:6;576:2;565:9;561:18;556:2;548:6;544:15;509:79;:::i;:::-;649:2;628:15;-1:-1:-1;;624:29:174;609:45;;;;656:2;605:54;;269:396;-1:-1:-1;;269:396:174:o;670:316::-;747:6;755;763;816:2;804:9;795:7;791:23;787:32;784:52;;;832:1;829;822:12;784:52;-1:-1:-1;;855:23:174;;;925:2;910:18;;897:32;;-1:-1:-1;976:2:174;961:18;;;948:32;;670:316;-1:-1:-1;670:316:174:o;991:367::-;1054:8;1064:6;1118:3;1111:4;1103:6;1099:17;1095:27;1085:55;;1136:1;1133;1126:12;1085:55;-1:-1:-1;1159:20:174;;1202:18;1191:30;;1188:50;;;1234:1;1231;1224:12;1188:50;1271:4;1263:6;1259:17;1247:29;;1331:3;1324:4;1314:6;1311:1;1307:14;1299:6;1295:27;1291:38;1288:47;1285:67;;;1348:1;1345;1338:12;1285:67;991:367;;;;;:::o;1363:1403::-;1556:6;1564;1572;1580;1588;1596;1604;1612;1665:3;1653:9;1644:7;1640:23;1636:33;1633:53;;;1682:1;1679;1672:12;1633:53;1722:9;1709:23;1751:18;1792:2;1784:6;1781:14;1778:34;;;1808:1;1805;1798:12;1778:34;1847:70;1909:7;1900:6;1889:9;1885:22;1847:70;:::i;:::-;1936:8;;-1:-1:-1;1821:96:174;-1:-1:-1;2024:2:174;2009:18;;1996:32;;-1:-1:-1;2040:16:174;;;2037:36;;;2069:1;2066;2059:12;2037:36;2108:72;2172:7;2161:8;2150:9;2146:24;2108:72;:::i;:::-;2199:8;;-1:-1:-1;2082:98:174;-1:-1:-1;2287:2:174;2272:18;;2259:32;;-1:-1:-1;2303:16:174;;;2300:36;;;2332:1;2329;2322:12;2300:36;2371:72;2435:7;2424:8;2413:9;2409:24;2371:72;:::i;:::-;2462:8;;-1:-1:-1;2345:98:174;-1:-1:-1;2550:2:174;2535:18;;2522:32;;-1:-1:-1;2566:16:174;;;2563:36;;;2595:1;2592;2585:12;2563:36;;2634:72;2698:7;2687:8;2676:9;2672:24;2634:72;:::i;:::-;1363:1403;;;;-1:-1:-1;1363:1403:174;;-1:-1:-1;1363:1403:174;;;;;;2725:8;-1:-1:-1;;;1363:1403:174:o;4180:131::-;-1:-1:-1;;;;;4255:31:174;;4245:42;;4235:70;;4301:1;4298;4291:12;4316:134;4384:20;;4413:31;4384:20;4413:31;:::i;:::-;4316:134;;;:::o;4455:159::-;4522:20;;4582:6;4571:18;;4561:29;;4551:57;;4604:1;4601;4594:12;4619:663;4731:6;4739;4747;4755;4763;4771;4779;4832:3;4820:9;4811:7;4807:23;4803:33;4800:53;;;4849:1;4846;4839:12;4800:53;4885:9;4872:23;4862:33;;4942:2;4931:9;4927:18;4914:32;4904:42;;4993:2;4982:9;4978:18;4965:32;4955:42;;5044:2;5033:9;5029:18;5016:32;5006:42;;5095:3;5084:9;5080:19;5067:33;5057:43;;5150:3;5139:9;5135:19;5122:33;5164:31;5189:5;5164:31;:::i;:::-;5214:5;-1:-1:-1;5238:38:174;5271:3;5256:19;;5238:38;:::i;:::-;5228:48;;4619:663;;;;;;;;;;:::o;5287:388::-;5355:6;5363;5416:2;5404:9;5395:7;5391:23;5387:32;5384:52;;;5432:1;5429;5422:12;5384:52;5471:9;5458:23;5490:31;5515:5;5490:31;:::i;:::-;5540:5;-1:-1:-1;5597:2:174;5582:18;;5569:32;5610:33;5569:32;5610:33;:::i;:::-;5662:7;5652:17;;;5287:388;;;;;:::o;5680:773::-;5802:6;5810;5818;5826;5879:2;5867:9;5858:7;5854:23;5850:32;5847:52;;;5895:1;5892;5885:12;5847:52;5935:9;5922:23;5964:18;6005:2;5997:6;5994:14;5991:34;;;6021:1;6018;6011:12;5991:34;6060:70;6122:7;6113:6;6102:9;6098:22;6060:70;:::i;:::-;6149:8;;-1:-1:-1;6034:96:174;-1:-1:-1;6237:2:174;6222:18;;6209:32;;-1:-1:-1;6253:16:174;;;6250:36;;;6282:1;6279;6272:12;6250:36;;6321:72;6385:7;6374:8;6363:9;6359:24;6321:72;:::i;:::-;5680:773;;;;-1:-1:-1;6412:8:174;-1:-1:-1;;;;5680:773:174:o;6458:525::-;6544:6;6552;6560;6568;6621:3;6609:9;6600:7;6596:23;6592:33;6589:53;;;6638:1;6635;6628:12;6589:53;6677:9;6664:23;6696:31;6721:5;6696:31;:::i;:::-;6746:5;-1:-1:-1;6798:2:174;6783:18;;6770:32;;-1:-1:-1;6849:2:174;6834:18;;6821:32;;-1:-1:-1;6905:2:174;6890:18;;6877:32;6918:33;6877:32;6918:33;:::i;:::-;6458:525;;;;-1:-1:-1;6458:525:174;;-1:-1:-1;;6458:525:174:o;6988:383::-;7065:6;7073;7081;7134:2;7122:9;7113:7;7109:23;7105:32;7102:52;;;7150:1;7147;7140:12;7102:52;7186:9;7173:23;7163:33;;7243:2;7232:9;7228:18;7215:32;7205:42;;7297:2;7286:9;7282:18;7269:32;7310:31;7335:5;7310:31;:::i;:::-;7360:5;7350:15;;;6988:383;;;;;:::o;7376:387::-;7452:6;7460;7468;7521:2;7509:9;7500:7;7496:23;7492:32;7489:52;;;7537:1;7534;7527:12;7489:52;7573:9;7560:23;7550:33;;7633:2;7622:9;7618:18;7605:32;7646:31;7671:5;7646:31;:::i;:::-;7696:5;-1:-1:-1;7720:37:174;7753:2;7738:18;;7720:37;:::i;:::-;7710:47;;7376:387;;;;;:::o;7768:248::-;7836:6;7844;7897:2;7885:9;7876:7;7872:23;7868:32;7865:52;;;7913:1;7910;7903:12;7865:52;-1:-1:-1;;7936:23:174;;;8006:2;7991:18;;;7978:32;;-1:-1:-1;7768:248:174:o;8021:456::-;8098:6;8106;8114;8167:2;8155:9;8146:7;8142:23;8138:32;8135:52;;;8183:1;8180;8173:12;8135:52;8222:9;8209:23;8241:31;8266:5;8241:31;:::i;:::-;8291:5;-1:-1:-1;8348:2:174;8333:18;;8320:32;8361:33;8320:32;8361:33;:::i;:::-;8021:456;;8413:7;;-1:-1:-1;;;8467:2:174;8452:18;;;;8439:32;;8021:456::o;8690:1088::-;8848:6;8856;8864;8872;8880;8888;8941:2;8929:9;8920:7;8916:23;8912:32;8909:52;;;8957:1;8954;8947:12;8909:52;8997:9;8984:23;9026:18;9067:2;9059:6;9056:14;9053:34;;;9083:1;9080;9073:12;9053:34;9122:70;9184:7;9175:6;9164:9;9160:22;9122:70;:::i;:::-;9211:8;;-1:-1:-1;9096:96:174;-1:-1:-1;9299:2:174;9284:18;;9271:32;;-1:-1:-1;9315:16:174;;;9312:36;;;9344:1;9341;9334:12;9312:36;9383:72;9447:7;9436:8;9425:9;9421:24;9383:72;:::i;:::-;9474:8;;-1:-1:-1;9357:98:174;-1:-1:-1;9562:2:174;9547:18;;9534:32;;-1:-1:-1;9578:16:174;;;9575:36;;;9607:1;9604;9597:12;9575:36;;9646:72;9710:7;9699:8;9688:9;9684:24;9646:72;:::i;:::-;8690:1088;;;;-1:-1:-1;8690:1088:174;;-1:-1:-1;8690:1088:174;;9737:8;;8690:1088;-1:-1:-1;;;8690:1088:174:o;10876:1584::-;11096:6;11104;11112;11120;11128;11136;11144;11152;11160;11168;11176:7;11230:3;11218:9;11209:7;11205:23;11201:33;11198:53;;;11247:1;11244;11237:12;11198:53;11270:18;11328:2;11316:9;11303:23;11300:31;11297:51;;;11344:1;11341;11334:12;11297:51;11383:87;11462:7;11449:9;11436:23;11425:9;11421:39;11383:87;:::i;:::-;11489:8;;-1:-1:-1;11516:8:174;-1:-1:-1;11567:2:174;11552:18;;11539:32;11536:40;-1:-1:-1;11533:60:174;;;11589:1;11586;11579:12;11533:60;11628:96;11716:7;11709:2;11698:9;11694:18;11681:32;11670:9;11666:48;11628:96;:::i;:::-;11743:8;;-1:-1:-1;11770:8:174;-1:-1:-1;11821:2:174;11806:18;;11793:32;11790:40;-1:-1:-1;11787:60:174;;;11843:1;11840;11833:12;11787:60;11882:96;11970:7;11963:2;11952:9;11948:18;11935:32;11924:9;11920:48;11882:96;:::i;:::-;11997:8;;-1:-1:-1;12024:8:174;-1:-1:-1;12075:2:174;12060:18;;12047:32;12044:40;-1:-1:-1;12041:60:174;;;12097:1;12094;12087:12;12041:60;;12136:96;12224:7;12217:2;12206:9;12202:18;12189:32;12178:9;12174:48;12136:96;:::i;:::-;12251:8;;-1:-1:-1;12278:8:174;-1:-1:-1;12333:3:174;12318:19;;12305:33;;-1:-1:-1;12357:39:174;12391:3;12376:19;;12357:39;:::i;:::-;12347:49;;12416:38;12449:3;12438:9;12434:19;12416:38;:::i;:::-;12405:49;;10876:1584;;;;;;;;;;;;;;:::o;12465:315::-;12533:6;12541;12594:2;12582:9;12573:7;12569:23;12565:32;12562:52;;;12610:1;12607;12600:12;12562:52;12649:9;12636:23;12668:31;12693:5;12668:31;:::i;:::-;12718:5;12770:2;12755:18;;;;12742:32;;-1:-1:-1;;;12465:315:174:o;12967:138::-;13046:13;;13068:31;13046:13;13068:31;:::i;13110:508::-;13207:6;13215;13223;13231;13284:3;13272:9;13263:7;13259:23;13255:33;13252:53;;;13301:1;13298;13291:12;13252:53;13333:9;13327:16;13352:31;13377:5;13352:31;:::i;:::-;13447:2;13432:18;;13426:25;13496:2;13481:18;;13475:25;13402:5;;-1:-1:-1;13426:25:174;-1:-1:-1;13509:33:174;13475:25;13509:33;:::i;:::-;13608:2;13593:18;;;;13587:25;13110:508;;;;-1:-1:-1;;;13110:508:174:o;13623:127::-;13684:10;13679:3;13675:20;13672:1;13665:31;13715:4;13712:1;13705:15;13739:4;13736:1;13729:15;13755:128;13822:9;;;13843:11;;;13840:37;;;13857:18;;:::i;:::-;13755:128;;;;:::o;14212:324::-;14414:2;14396:21;;;14453:1;14433:18;;;14426:29;-1:-1:-1;;;14486:2:174;14471:18;;14464:31;14527:2;14512:18;;14212:324::o;14541:127::-;14602:10;14597:3;14593:20;14590:1;14583:31;14633:4;14630:1;14623:15;14657:4;14654:1;14647:15;14673:125;14738:9;;;14759:10;;;14756:36;;;14772:18;;:::i;14803:135::-;14842:3;14863:17;;;14860:43;;14883:18;;:::i;:::-;-1:-1:-1;14930:1:174;14919:13;;14803:135::o;14943:311::-;15031:19;;;15013:3;-1:-1:-1;;;;;15062:31:174;;15059:51;;;15106:1;15103;15096:12;15059:51;15142:6;15139:1;15135:14;15194:8;15187:5;15180:4;15175:3;15171:14;15158:45;15223:18;;;;15243:4;15219:29;;14943:311;-1:-1:-1;;;14943:311:174:o;15259:522::-;15359:6;15354:3;15347:19;15329:3;15385:4;15414:2;15409:3;15405:12;15398:19;;15440:5;15463:1;15473:283;15487:6;15484:1;15481:13;15473:283;;;15564:6;15551:20;15584:33;15609:7;15584:33;:::i;:::-;-1:-1:-1;;;;;15642:33:174;15630:46;;15696:12;;;;15731:15;;;;15672:1;15502:9;15473:283;;;-1:-1:-1;15772:3:174;;15259:522;-1:-1:-1;;;;;15259:522:174:o;15786:1283::-;16237:3;16226:9;16219:22;16200:4;16264:74;16333:3;16322:9;16318:19;16310:6;16302;16264:74;:::i;:::-;16357:2;16407:9;16399:6;16395:22;16390:2;16379:9;16375:18;16368:50;16441:61;16495:6;16487;16479;16441:61;:::i;:::-;16427:75;;16550:9;16542:6;16538:22;16533:2;16522:9;16518:18;16511:50;16584:61;16638:6;16630;16622;16584:61;:::i;:::-;16681:22;;;16676:2;16661:18;;16654:50;16739:22;;;16815:6;;-1:-1:-1;16777:15:174;;16839:1;16849:194;16863:6;16860:1;16857:13;16849:194;;;16955:6;16928:25;16946:6;16928:25;:::i;:::-;16924:38;16912:51;;17018:15;;;;16983:12;;;;16885:1;16878:9;16849:194;;;-1:-1:-1;17060:3:174;15786:1283;-1:-1:-1;;;;;;;;;;;;15786:1283:174:o;17074:983::-;17527:3;17516:9;17509:22;17490:4;17554:74;17623:3;17612:9;17608:19;17600:6;17592;17554:74;:::i;:::-;17676:9;17668:6;17664:22;17659:2;17648:9;17644:18;17637:50;17710:61;17764:6;17756;17748;17710:61;:::i;:::-;17696:75;;17819:9;17811:6;17807:22;17802:2;17791:9;17787:18;17780:50;17853:61;17907:6;17899;17891;17853:61;:::i;:::-;17839:75;;17962:9;17954:6;17950:22;17945:2;17934:9;17930:18;17923:50;17990:61;18044:6;18036;18028;17990:61;:::i;:::-;17982:69;17074:983;-1:-1:-1;;;;;;;;;;;17074:983:174:o;19325:519::-;19602:2;19591:9;19584:21;19565:4;19628:73;19697:2;19686:9;19682:18;19674:6;19666;19628:73;:::i;:::-;19749:9;19741:6;19737:22;19732:2;19721:9;19717:18;19710:50;19777:61;19831:6;19823;19815;19777:61;:::i;:::-;19769:69;19325:519;-1:-1:-1;;;;;;;19325:519:174:o;20301:127::-;20362:10;20357:3;20353:20;20350:1;20343:31;20393:4;20390:1;20383:15;20417:4;20414:1;20407:15;20433:250;20500:2;20494:9;20542:6;20530:19;;20579:18;20564:34;;20600:22;;;20561:62;20558:88;;;20626:18;;:::i;:::-;20662:2;20655:22;20433:250;:::o;20688:426::-;20769:5;20817:4;20805:9;20800:3;20796:19;20792:30;20789:50;;;20835:1;20832;20825:12;20789:50;20868:2;20862:9;20910:4;20902:6;20898:17;20981:6;20969:10;20966:22;20945:18;20933:10;20930:34;20927:62;20924:88;;;20992:18;;:::i;:::-;21028:2;21021:22;21091:16;;21076:32;;-1:-1:-1;21061:6:174;20688:426;-1:-1:-1;20688:426:174:o;21119:699::-;21173:5;21226:3;21219:4;21211:6;21207:17;21203:27;21193:55;;21244:1;21241;21234:12;21193:55;21273:6;21267:13;21299:18;21336:2;21332;21329:10;21326:36;;;21342:18;;:::i;:::-;21417:2;21411:9;21385:2;21471:13;;-1:-1:-1;;21467:22:174;;;21491:2;21463:31;21459:40;21447:53;;;21515:18;;;21535:22;;;21512:46;21509:72;;;21561:18;;:::i;:::-;21601:10;21597:2;21590:22;21636:2;21628:6;21621:18;21682:3;21675:4;21670:2;21662:6;21658:15;21654:26;21651:35;21648:55;;;21699:1;21696;21689:12;21648:55;21712:76;21785:2;21778:4;21770:6;21766:17;21759:4;21751:6;21747:17;21712:76;:::i;:::-;21806:6;21119:699;-1:-1:-1;;;;;;21119:699:174:o;21823:192::-;21902:13;;21955:34;21944:46;;21934:57;;21924:85;;22005:1;22002;21995:12;22020:169;22098:13;;22151:12;22140:24;;22130:35;;22120:63;;22179:1;22176;22169:12;22194:1962;22290:6;22343:2;22331:9;22322:7;22318:23;22314:32;22311:52;;;22359:1;22356;22349:12;22311:52;22392:9;22386:16;22421:18;22462:2;22454:6;22451:14;22448:34;;;22478:1;22475;22468:12;22448:34;22501:22;;;;22557:6;22539:16;;;22535:29;22532:49;;;22577:1;22574;22567:12;22532:49;22603:17;;:::i;:::-;22643:65;22700:7;22696:2;22643:65;:::i;:::-;22636:5;22629:80;22741:42;22779:2;22775;22771:11;22741:42;:::i;:::-;22736:2;22729:5;22725:14;22718:66;22816:42;22854:2;22850;22846:11;22816:42;:::i;:::-;22811:2;22804:5;22800:14;22793:66;22891:42;22929:2;22925;22921:11;22891:42;:::i;:::-;22886:2;22879:5;22875:14;22868:66;22967:43;23005:3;23001:2;22997:12;22967:43;:::i;:::-;22961:3;22954:5;22950:15;22943:68;23044:43;23082:3;23078:2;23074:12;23044:43;:::i;:::-;23038:3;23031:5;23027:15;23020:68;23121:43;23159:3;23155:2;23151:12;23121:43;:::i;:::-;23115:3;23108:5;23104:15;23097:68;23204:3;23200:2;23196:12;23190:19;23234:2;23224:8;23221:16;23218:36;;;23250:1;23247;23240:12;23218:36;23287:56;23335:7;23324:8;23320:2;23316:17;23287:56;:::i;:::-;23281:3;23270:15;;23263:81;-1:-1:-1;23363:3:174;23404:11;;;23398:18;23382:14;;;23375:42;23436:3;23477:11;;;23471:18;23455:14;;;23448:42;23509:3;23550:11;;;23544:18;23528:14;;;23521:42;23582:3;23623:11;;;23617:18;23601:14;;;23594:42;23655:3;;-1:-1:-1;23690:42:174;23720:11;;;23690:42;:::i;:::-;23685:2;23678:5;23674:14;23667:66;23752:3;23742:13;;23787:42;23825:2;23821;23817:11;23787:42;:::i;:::-;23782:2;23775:5;23771:14;23764:66;23849:3;23839:13;;23884:42;23922:2;23918;23914:11;23884:42;:::i;:::-;23879:2;23872:5;23868:14;23861:66;23947:3;23936:14;;23983:43;24021:3;24017:2;24013:12;23983:43;:::i;:::-;23977:3;23970:5;23966:15;23959:68;24047:3;24036:14;;24083:42;24120:3;24116:2;24112:12;24083:42;:::i;:::-;24066:15;;;24059:67;;;;24070:5;22194:1962;-1:-1:-1;;;;22194:1962:174:o;24161:184::-;24231:6;24284:2;24272:9;24263:7;24259:23;24255:32;24252:52;;;24300:1;24297;24290:12;24252:52;-1:-1:-1;24323:16:174;;24161:184;-1:-1:-1;24161:184:174:o;24730:277::-;24797:6;24850:2;24838:9;24829:7;24825:23;24821:32;24818:52;;;24866:1;24863;24856:12;24818:52;24898:9;24892:16;24951:5;24944:13;24937:21;24930:5;24927:32;24917:60;;24973:1;24970;24963:12;24917:60;24996:5;24730:277;-1:-1:-1;;;24730:277:174:o;26048:251::-;26118:6;26171:2;26159:9;26150:7;26146:23;26142:32;26139:52;;;26187:1;26184;26177:12;26139:52;26219:9;26213:16;26238:31;26263:5;26238:31;:::i;26583:750::-;26948:2;26937:9;26930:21;26911:4;26974:73;27043:2;27032:9;27028:18;27020:6;27012;26974:73;:::i;:::-;27095:9;27087:6;27083:22;27078:2;27067:9;27063:18;27056:50;27129:61;27183:6;27175;27167;27129:61;:::i;:::-;27115:75;;27238:9;27230:6;27226:22;27221:2;27210:9;27206:18;27199:50;27266:61;27320:6;27312;27304;27266:61;:::i;:::-;27258:69;26583:750;-1:-1:-1;;;;;;;;;26583:750:174:o;27338:1416::-;27694:2;27706:21;;;27776:13;;27679:18;;;27798:22;;;27646:4;;27874;;27851:3;27836:19;;;27901:15;;;27646:4;27944:169;27958:6;27955:1;27952:13;27944:169;;;28019:13;;28007:26;;28053:12;;;;28088:15;;;;27980:1;27973:9;27944:169;;;27948:3;;;28158:9;28153:3;28149:19;28144:2;28133:9;28129:18;28122:47;28192:58;28246:3;28238:6;28230;28192:58;:::i;:::-;28286:22;;;28281:2;28266:18;;28259:50;28362:13;;28384:24;;;28466:15;;;;-1:-1:-1;28426:15:174;;;;28501:1;28511:215;28527:8;28522:3;28519:17;28511:215;;;28600:15;;-1:-1:-1;;;;;28596:41:174;28582:56;;28699:17;;;;28660:14;;;;28634:1;28546:11;28511:215;;;-1:-1:-1;28743:5:174;;27338:1416;-1:-1:-1;;;;;;;;;27338:1416:174:o;28759:247::-;28818:6;28871:2;28859:9;28850:7;28846:23;28842:32;28839:52;;;28887:1;28884;28877:12;28839:52;28926:9;28913:23;28945:31;28970:5;28945:31;:::i;29011:1238::-;29547:3;29536:9;29529:22;29510:4;29574:74;29643:3;29632:9;29628:19;29620:6;29612;29574:74;:::i;:::-;29696:9;29688:6;29684:22;29679:2;29668:9;29664:18;29657:50;29730:61;29784:6;29776;29768;29730:61;:::i;:::-;29716:75;;29839:9;29831:6;29827:22;29822:2;29811:9;29807:18;29800:50;29873:61;29927:6;29919;29911;29873:61;:::i;:::-;29859:75;;29982:9;29974:6;29970:22;29965:2;29954:9;29950:18;29943:50;30010:61;30064:6;30056;30048;30010:61;:::i;:::-;30102:3;30087:19;;30080:35;;;;-1:-1:-1;;;;;;;30152:32:174;;;;30172:3;30131:19;;30124:61;30235:6;30222:20;30216:3;30201:19;;;30194:49;30002:69;29011:1238;-1:-1:-1;;;;;;;;29011:1238:174:o;30254:287::-;30383:3;30421:6;30415:13;30437:66;30496:6;30491:3;30484:4;30476:6;30472:17;30437:66;:::i;:::-;30519:16;;;;;30254:287;-1:-1:-1;;30254:287:174:o",
    "linkReferences": {}
  },
  "methodIdentifiers": {
    "authorizeExecutionDelegate()": "caaabc60",
    "batchBidETH(address[],uint256[],uint256[],address[])": "31a9b157",
    "batchBorrowETH(uint256[],uint256[],uint256[],uint256[],uint256,address,uint16)": "d0fee568",
    "batchDepositETH(uint256[],uint256[],address[],uint16[])": "1976c7ba",
    "batchRefinanceETH(uint256[],uint256[],uint256[])": "bba6bc6d",
    "batchRepayETH(uint256[],uint256[])": "5a953999",
    "batchWithdrawETH(uint256[],uint256[],address[])": "ced46f82",
    "bidETH(address,uint256,uint256,address)": "664054ce",
    "borrowETH(uint256,uint256,uint256,uint256,uint256,address,uint16)": "35f9a701",
    "depositETH(uint256,address,uint16)": "76e13af1",
    "emergencyEtherTransfer(address,uint256)": "eed88b8d",
    "emergencyTokenTransfer(address,address,uint256)": "a3d5b255",
    "getWETHAddress()": "affa8817",
    "initialize(address,address)": "485cc955",
    "refinanceETH(uint256,uint256,uint256)": "0572c30f",
    "repayETH(uint256,uint256)": "7f185c1e",
    "withdrawETH(uint256,uint256,address)": "6a41a61b"
  },
  "rawMetadata": "{\"compiler\":{\"version\":\"0.8.16+commit.07a7930e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"authorizeExecutionDelegate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"assets\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"borrowIds\",\"type\":\"uint256[]\"},{\"internalType\":\"address[]\",\"name\":\"onBehalfOfs\",\"type\":\"address[]\"}],\"name\":\"batchBidETH\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenIds\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenValues\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"reserveIds\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"duration\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"internalType\":\"uint16\",\"name\":\"referralCode\",\"type\":\"uint16\"}],\"name\":\"batchBorrowETH\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"reserveIds\",\"type\":\"uint256[]\"},{\"internalType\":\"address[]\",\"name\":\"onBehalfOfs\",\"type\":\"address[]\"},{\"internalType\":\"uint16[]\",\"name\":\"referralCodes\",\"type\":\"uint16[]\"}],\"name\":\"batchDepositETH\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"borrowIds\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"durations\",\"type\":\"uint256[]\"}],\"name\":\"batchRefinanceETH\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"borrowIds\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"}],\"name\":\"batchRepayETH\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"reserveIds\",\"type\":\"uint256[]\"},{\"internalType\":\"address[]\",\"name\":\"tos\",\"type\":\"address[]\"}],\"name\":\"batchWithdrawETH\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"borrowId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"}],\"name\":\"bidETH\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenValue\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"reserveId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"duration\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"internalType\":\"uint16\",\"name\":\"referralCode\",\"type\":\"uint16\"}],\"name\":\"borrowETH\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"reserveId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"internalType\":\"uint16\",\"name\":\"referralCode\",\"type\":\"uint16\"}],\"name\":\"depositETH\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"emergencyEtherTransfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"emergencyTokenTransfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getWETHAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"weth\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"addressProvider\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"borrowId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"duration\",\"type\":\"uint256\"}],\"name\":\"refinanceETH\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"borrowId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"repayETH\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"reserveId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"withdrawETH\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"authorizeExecutionDelegate()\":{\"details\":\"Authorizes execution delegate to perform WETH transactions*\"},\"batchBidETH(address[],uint256[],uint256[],address[])\":{\"details\":\"batch bid purchases the underlying collatearls of a defaulted borrows.\",\"params\":{\"amounts\":\"the payment amounts\",\"assets\":\"addresses of the asset contracts used for payment\",\"borrowIds\":\"the ids of the defaulted borrows\",\"onBehalfOfs\":\"The addresses to receive the NFTs.\"}},\"batchBorrowETH(uint256[],uint256[],uint256[],uint256[],uint256,address,uint16)\":{\"details\":\"batch borrow WETH, unwraps to ETH and send both the ETH and DebtTokens to msg.sender, via `approveDelegation` and onBehalf argument in `LendingPool.borrow`.\",\"params\":{\"amounts\":\"the amounts of ETH to borrow\",\"duration\":\"The duration of the loans, 0 if open-ended\",\"onBehalfOf\":\"The address to receive the loans.\",\"referralCode\":\"integrators are assigned a referral code and can potentially receive rewards\",\"reserveIds\":\"The ids of the reserves to borrow against. \",\"tokenIds\":\"The tokenIds of the ERC721 / ERC1155 tokens to be deposited. \",\"tokenValues\":\"The numbers of same-value tokens supplied (0 implies ERC721)\"}},\"batchDepositETH(uint256[],uint256[],address[],uint16[])\":{\"details\":\"batch deposits WETH into the reserve, using native ETH.  A corresponding amount of the overlying asset (fTokens) are minted.\",\"params\":{\"amounts\":\"the amounts to be deposited\",\"onBehalfOfs\":\"addresses of the users who will receive the fTokens representing the deposit\",\"referralCodes\":\"integrators are assigned a referral code and can potentially receive rewards.*\",\"reserveIds\":\"the ids of the target reserves\"}},\"batchRefinanceETH(uint256[],uint256[],uint256[])\":{\"details\":\"batch refinances borrows on the WETH reserve, for the specified amount (or for the whole amount, if uint256(-1) is specified).\",\"params\":{\"amounts\":\"the borrow amounts of the refinanced loans\",\"borrowIds\":\"the ids of the loans to be refinanced\",\"durations\":\"The durations of the refinanced loans, 0 if open-ended\"}},\"batchRepayETH(uint256[],uint256[])\":{\"details\":\"batch repays a borrow on the WETH reserve, for the specified amount (or for the whole amount, if uint256(-1) is specified).\",\"params\":{\"amounts\":\"the amounts to repay, or uint256(-1) if the user wants to repay everything\",\"borrowIds\":\"the ids of the borrows to repay\"}},\"batchWithdrawETH(uint256[],uint256[],address[])\":{\"details\":\"batch withdraws the WETH _reserves of msg.sender.\",\"params\":{\"amounts\":\"amounts of aWETH to withdraw and receive native ETH\",\"reserveIds\":\"the ids of the target reserves\",\"tos\":\"addresses of the users who will receive native ETH\"}},\"bidETH(address,uint256,uint256,address)\":{\"details\":\"bid purchases the underlying collatearl of a defaulted borrow.\",\"params\":{\"amount\":\"the payment amount\",\"asset\":\"address of the asset contract used for payment\",\"borrowId\":\"the id of the defaulted borrow\",\"onBehalfOf\":\"The address to receive the NFT.\"}},\"borrowETH(uint256,uint256,uint256,uint256,uint256,address,uint16)\":{\"details\":\"borrow WETH, unwraps to ETH and send both the ETH and DebtTokens to msg.sender, via `approveDelegation` and onBehalf argument in `LendingPool.borrow`.\",\"params\":{\"amount\":\"the amount of ETH to borrow\",\"duration\":\"The duration of the loan, 0 if open-ended\",\"onBehalfOf\":\"The address to receive the loan.\",\"referralCode\":\"integrators are assigned a referral code and can potentially receive rewards\",\"reserveId\":\"The id of the reserve to borrow against. \",\"tokenId\":\"The tokenId of the ERC721 / ERC1155 token to be deposited. \",\"tokenValue\":\"The number of same-value tokens supplied (0 implies ERC721)\"}},\"depositETH(uint256,address,uint16)\":{\"details\":\"deposits WETH into the reserve, using native ETH.  A corresponding amount of the overlying asset (fTokens) are minted.\",\"params\":{\"onBehalfOf\":\"address of the user who will receive the fTokens representing the deposit\",\"referralCode\":\"integrators are assigned a referral code and can potentially receive rewards.*\",\"reserveId\":\"the id of the target reserve\"}},\"emergencyEtherTransfer(address,uint256)\":{\"details\":\"transfer native Ether from the utility contract, for native Ether recovery in case of stuck Ether due selfdestructs or transfer ether to pre-computated contract address before deployment.\",\"params\":{\"amount\":\"amount to send\",\"to\":\"recipient of the transfer\"}},\"emergencyTokenTransfer(address,address,uint256)\":{\"details\":\"transfer ERC20 from the utility contract, for ERC20 recovery in case of stuck tokens due direct transfers to the contract address.\",\"params\":{\"amount\":\"amount to send\",\"to\":\"recipient of the transfer\",\"token\":\"token to transfer\"}},\"getWETHAddress()\":{\"details\":\"Get WETH address used by WETHGateway\"},\"initialize(address,address)\":{\"details\":\"Function is invoked by the proxy contract when the WETHGateway contract  is added to the AddressProvider of the market. Sets the WETH address and the AddressesProvider address. \",\"params\":{\"addressProvider\":\"The address of the AddressProvider*\",\"weth\":\"Address of the Wrapped Ether contract\"}},\"refinanceETH(uint256,uint256,uint256)\":{\"details\":\"refinances a borrow on the WETH reserve, for the specified amount (or for the whole amount, if uint256(-1) is specified).\",\"params\":{\"amount\":\"the borrow amount of the refinanced loan\",\"borrowId\":\"the id of loan to be refinanced\",\"duration\":\"The duration of the refinanced loan, 0 if open-ended\"}},\"repayETH(uint256,uint256)\":{\"details\":\"repays a borrow on the WETH reserve, for the specified amount (or for the whole amount, if uint256(-1) is specified).\",\"params\":{\"amount\":\"the amount to repay, or uint256(-1) if the user wants to repay everything\",\"borrowId\":\"the id of the borrow to repay\"}},\"withdrawETH(uint256,uint256,address)\":{\"details\":\"withdraws the WETH _reserves of msg.sender.\",\"params\":{\"amount\":\"amount of aWETH to withdraw and receive native ETH\",\"reserveId\":\"the id of the target reserve\",\"to\":\"address of the user who will receive native ETH\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/protocol/gateways/WETHGateway.sol\":\"WETHGateway\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@chainlink/=lib/chainlink/\",\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":chainlink/=lib/chainlink/integration-tests/contracts/ethereum/src/\",\":ds-test/=lib/forge-std/lib/ds-test/src/\",\":forge-std/=lib/forge-std/src/\"]},\"sources\":{\"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol\":{\"keccak256\":\"0xe798cadb41e2da274913e4b3183a80f50fb057a42238fe8467e077268100ec27\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://899f850f7df5a270bccfb765d70069959ca1c20d3a7381c1c3bda8a3ffee1935\",\"dweb:/ipfs/QmVdnAqwyX2L3nX2HDA5WKGtVBFyH1nKE9A1k7fZnPBkhP\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/security/ReentrancyGuardUpgradeable.sol\":{\"keccak256\":\"0x2b3005a0064cfc558bdf64b2bae94b565f4574a536aadd61c13838d4f2157790\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://622c3eb87563e71585c9f538d1a196fe2d154dcc5b8f335e8770a8acc95e1f3a\",\"dweb:/ipfs/QmSnDqJJLzv3mirjGB1vrk5X7hegFdS7BKpscpxyqj7sWu\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/IERC20Upgradeable.sol\":{\"keccak256\":\"0x4e733d3164f73f461eaf9d8087a7ad1ea180bdc8ba0d3d61b0e1ae16d8e63dff\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://75b47c3aeca7b66ea6752f8be020ec5c1c502de6ec9065272dae23d3a52196e2\",\"dweb:/ipfs/QmUebPMHv16tYKFh5BmBQkMfRFb5b8UZ2RgVwdjxCeufVF\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/extensions/IERC20MetadataUpgradeable.sol\":{\"keccak256\":\"0x605434219ebbe4653f703640f06969faa5a1d78f0bfef878e5ddbb1ca369ceeb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4c9c634f99dd02d73ce7498b03a6305e251c05eeebb71457306561c1fab0fa7d\",\"dweb:/ipfs/QmbYRBbZHy8YoaQKXdPryiL3CSS7uUaRfRYi1TUj9cTqJQ\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/AddressUpgradeable.sol\":{\"keccak256\":\"0x2edcb41c121abc510932e8d83ff8b82cf9cdde35e7c297622f5c29ef0af25183\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://72460c66cd1c3b1c11b863e0d8df0a1c56f37743019e468dc312c754f43e3b06\",\"dweb:/ipfs/QmPExYKiNb9PUsgktQBupPaM33kzDHxaYoVeJdLhv8s879\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol\":{\"keccak256\":\"0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d6520943ea55fdf5f0bafb39ed909f64de17051bc954ff3e88c9e5621412c79c\",\"dweb:/ipfs/QmWZ4rAKTQbNG2HxGs46AcTXShsVytKeLs7CUCdCSv5N7a\"]},\"lib/openzeppelin-contracts/contracts/interfaces/IERC20.sol\":{\"keccak256\":\"0x6ebf1944ab804b8660eb6fc52f9fe84588cee01c2566a69023e59497e7d27f45\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2900536cdadec954ced8789a9d1ed4b5e640029e1424e91fd5b88026486f4d45\",\"dweb:/ipfs/QmUMUX7CuYoiHvFkhifqtXGaciw2wnm4t9sAoPzETZ3Gbq\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5a7d5b1ef5d8d5889ad2ed89d8619c09383b80b72ab226e0fe7bde1636481e34\",\"dweb:/ipfs/QmebXWgtEfumQGBdVeM6c71McLixYXQP5Bk6kKXuoY4Bmr\"]},\"src/interfaces/IAddressProvider.sol\":{\"keccak256\":\"0x6730abfcd8770e3279dad6137bf619ab98ee8b049e6dd85d2fbe87ba6224fde8\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://9b7d1588eab025b049f858ab2f329be7fec220198d956b9b61bf0b9bddc5761a\",\"dweb:/ipfs/QmTaFkYSUfWmbpsyE2TKC1QvP6eTDggZ72ZWodBhydqt5X\"]},\"src/interfaces/ICollateralManager.sol\":{\"keccak256\":\"0xdcb90cae810d15c23e0606ef3d9b30feec7d35e956082b88c1f35c5d6caf6438\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://c45a3cf14add38004018f32987cab971436cfd2e679eea71f2383f845bd68647\",\"dweb:/ipfs/QmPd9df3JmDFMHnhreYWw8tjmRGEQAtERnqj2YREXB5aP5\"]},\"src/interfaces/IFToken.sol\":{\"keccak256\":\"0x4c3ebc83c05720c9257d1b6b4930b647c08ba766b76928622a4c91c4a541a718\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://920cb41d52a659b88030fc3cf84fe5a87cc42f0c6e5c83a691c4732f84906689\",\"dweb:/ipfs/Qma657T4np5eBNono5yBXxE71jfT1TRDDkCPpH3kfw3SxM\"]},\"src/interfaces/ILendingPool.sol\":{\"keccak256\":\"0x345ab4285354bb5184bdd501d7c37920a711215b6f6c2db05b05d585f2454115\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://3b6264b135760dcdd59b9a3566c1305b00084922da177159a85c206ef6a91266\",\"dweb:/ipfs/QmSotEH7zF3vrEgo2gZuunWwroHgc6bw7TVRntzv7jsJn1\"]},\"src/interfaces/IPoolIncentivesController.sol\":{\"keccak256\":\"0x7cb2c32050814e6d6d962a603104facc3bb1dad15171304e3ee756648e8f9ae1\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://cf534f592706b2a61c539c03e5d1e199c15472bcfb4ee69838e5c93ba7914466\",\"dweb:/ipfs/QmPrvXhJigK1Ke51YwAWHon1Kv88WT26iD3MwzCaPDs1Kv\"]},\"src/interfaces/IScaledBalanceToken.sol\":{\"keccak256\":\"0xb6a8f00773c5f58af761573f39f6aa3649c9deec5c4e078f5e3ca78940e4eac7\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://0938c6fd92b015670a2bcf5ff971aafbc6295e07c78d1300c5e36a67002dc70c\",\"dweb:/ipfs/QmYDcxNaAAfnupwDcDN1xtQcCEXTwW1FWiaTiU3MksCQ1Z\"]},\"src/interfaces/IWETH.sol\":{\"keccak256\":\"0x0362c27a2c8e899e736d31c84d7e5d72a9fe722d3b10d7f78f888871bfa908ab\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://c4af992bdb0253a0cfaa392d478381d64c0e0d3834c0709ddeab0b831ee7807d\",\"dweb:/ipfs/QmXaFPzHPFEPXjp6EUFBAcEbybuiSSKa9uSwBMMarm79jy\"]},\"src/interfaces/IWETHGateway.sol\":{\"keccak256\":\"0x831ca4e10b8d5094c6b604e838d0d144aee306027455d0fa74f72f9092bf0a58\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://e216cc7934d2c89de2cd39f5d50b2c812c1fcacc89067537c7787a9a2ec43740\",\"dweb:/ipfs/QmNwFnCpMU3XWHzCx6npHj3gMyXnrDVT6EAzbj9NQNPHMt\"]},\"src/protocol/gateways/WETHGateway.sol\":{\"keccak256\":\"0xff18fc1dfb667afc6f3627e616e926319eee5dbea389defa6fadd176dc7de1d3\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://4e75f36c3ba9c009a3583fbbf4a0aaf1bc993b26fac18c95c9002a04584869b8\",\"dweb:/ipfs/QmVVTbWFF1GkaktG3fahwtXDvsrMCJFGXgmhydiJF7KUU8\"]},\"src/protocol/libraries/configuration/ReserveConfiguration.sol\":{\"keccak256\":\"0xa185efd08f4a3798bbafaa90fafd310f2e29634a2f83b62ee833b31a24232e3c\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://806a0ce876edbbbd418a8297735f66907a06650606b00eac5b510ab082ed3173\",\"dweb:/ipfs/QmQk5ybFrVqXfgXbndYcKBoQiahKScjFEABpJ3ATG8SYPh\"]},\"src/protocol/libraries/helpers/Errors.sol\":{\"keccak256\":\"0x490e76871922e89a13ba0bb88977be18c143fa9d0cd9afb033744a3d81479c52\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://1c409d4d1e1689d8d8f3c3e361198d20f3b6476608c5316d8e2d91f52373e8e3\",\"dweb:/ipfs/QmRZaYpxqjmBpbxb51KqswKYPSeCsU3ejbmk5E3MrMxJaM\"]},\"src/protocol/libraries/types/ConfigTypes.sol\":{\"keccak256\":\"0xa8f9b14d9adf738033fd1847b30012d0e022027614fd6c9bb31a01bc6bfb1634\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://b20c579d1b683dd5977a675c2e46adeebd56c96faa68cda9b0767edf02a5b650\",\"dweb:/ipfs/QmPULpaX2ouktArvXJxYNVPQ9vKBhEeCYA4smo8v57qFLD\"]},\"src/protocol/libraries/types/DataTypes.sol\":{\"keccak256\":\"0x0103c43499e5226d36906042a1723a3ee6ee18ba607cbffc9e776d4dc47edc10\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://550191b44b6ddfe84d81bd5ded46e1ab3ac493399adfca3634fd8348a4a087fa\",\"dweb:/ipfs/QmeoHga9azsBkTRdnzH9USs51JduGR2tgge5YmGW8dJ2Tq\"]}},\"version\":1}",
  "metadata": {
    "compiler": {
      "version": "0.8.16+commit.07a7930e"
    },
    "language": "Solidity",
    "output": {
      "abi": [
        {
          "inputs": [
            {
              "internalType": "uint8",
              "name": "version",
              "type": "uint8",
              "indexed": false
            }
          ],
          "type": "event",
          "name": "Initialized",
          "anonymous": false
        },
        {
          "inputs": [],
          "stateMutability": "payable",
          "type": "fallback"
        },
        {
          "inputs": [],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "authorizeExecutionDelegate"
        },
        {
          "inputs": [
            {
              "internalType": "address[]",
              "name": "assets",
              "type": "address[]"
            },
            {
              "internalType": "uint256[]",
              "name": "amounts",
              "type": "uint256[]"
            },
            {
              "internalType": "uint256[]",
              "name": "borrowIds",
              "type": "uint256[]"
            },
            {
              "internalType": "address[]",
              "name": "onBehalfOfs",
              "type": "address[]"
            }
          ],
          "stateMutability": "payable",
          "type": "function",
          "name": "batchBidETH"
        },
        {
          "inputs": [
            {
              "internalType": "uint256[]",
              "name": "amounts",
              "type": "uint256[]"
            },
            {
              "internalType": "uint256[]",
              "name": "tokenIds",
              "type": "uint256[]"
            },
            {
              "internalType": "uint256[]",
              "name": "tokenValues",
              "type": "uint256[]"
            },
            {
              "internalType": "uint256[]",
              "name": "reserveIds",
              "type": "uint256[]"
            },
            {
              "internalType": "uint256",
              "name": "duration",
              "type": "uint256"
            },
            {
              "internalType": "address",
              "name": "onBehalfOf",
              "type": "address"
            },
            {
              "internalType": "uint16",
              "name": "referralCode",
              "type": "uint16"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "batchBorrowETH"
        },
        {
          "inputs": [
            {
              "internalType": "uint256[]",
              "name": "amounts",
              "type": "uint256[]"
            },
            {
              "internalType": "uint256[]",
              "name": "reserveIds",
              "type": "uint256[]"
            },
            {
              "internalType": "address[]",
              "name": "onBehalfOfs",
              "type": "address[]"
            },
            {
              "internalType": "uint16[]",
              "name": "referralCodes",
              "type": "uint16[]"
            }
          ],
          "stateMutability": "payable",
          "type": "function",
          "name": "batchDepositETH"
        },
        {
          "inputs": [
            {
              "internalType": "uint256[]",
              "name": "borrowIds",
              "type": "uint256[]"
            },
            {
              "internalType": "uint256[]",
              "name": "amounts",
              "type": "uint256[]"
            },
            {
              "internalType": "uint256[]",
              "name": "durations",
              "type": "uint256[]"
            }
          ],
          "stateMutability": "payable",
          "type": "function",
          "name": "batchRefinanceETH"
        },
        {
          "inputs": [
            {
              "internalType": "uint256[]",
              "name": "borrowIds",
              "type": "uint256[]"
            },
            {
              "internalType": "uint256[]",
              "name": "amounts",
              "type": "uint256[]"
            }
          ],
          "stateMutability": "payable",
          "type": "function",
          "name": "batchRepayETH"
        },
        {
          "inputs": [
            {
              "internalType": "uint256[]",
              "name": "amounts",
              "type": "uint256[]"
            },
            {
              "internalType": "uint256[]",
              "name": "reserveIds",
              "type": "uint256[]"
            },
            {
              "internalType": "address[]",
              "name": "tos",
              "type": "address[]"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "batchWithdrawETH"
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "asset",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "amount",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "borrowId",
              "type": "uint256"
            },
            {
              "internalType": "address",
              "name": "onBehalfOf",
              "type": "address"
            }
          ],
          "stateMutability": "payable",
          "type": "function",
          "name": "bidETH"
        },
        {
          "inputs": [
            {
              "internalType": "uint256",
              "name": "amount",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "tokenId",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "tokenValue",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "reserveId",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "duration",
              "type": "uint256"
            },
            {
              "internalType": "address",
              "name": "onBehalfOf",
              "type": "address"
            },
            {
              "internalType": "uint16",
              "name": "referralCode",
              "type": "uint16"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "borrowETH"
        },
        {
          "inputs": [
            {
              "internalType": "uint256",
              "name": "reserveId",
              "type": "uint256"
            },
            {
              "internalType": "address",
              "name": "onBehalfOf",
              "type": "address"
            },
            {
              "internalType": "uint16",
              "name": "referralCode",
              "type": "uint16"
            }
          ],
          "stateMutability": "payable",
          "type": "function",
          "name": "depositETH"
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "to",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "amount",
              "type": "uint256"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "emergencyEtherTransfer"
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "token",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "to",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "amount",
              "type": "uint256"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "emergencyTokenTransfer"
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "getWETHAddress",
          "outputs": [
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "weth",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "addressProvider",
              "type": "address"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "initialize"
        },
        {
          "inputs": [
            {
              "internalType": "uint256",
              "name": "borrowId",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "amount",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "duration",
              "type": "uint256"
            }
          ],
          "stateMutability": "payable",
          "type": "function",
          "name": "refinanceETH"
        },
        {
          "inputs": [
            {
              "internalType": "uint256",
              "name": "borrowId",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "amount",
              "type": "uint256"
            }
          ],
          "stateMutability": "payable",
          "type": "function",
          "name": "repayETH"
        },
        {
          "inputs": [
            {
              "internalType": "uint256",
              "name": "amount",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "reserveId",
              "type": "uint256"
            },
            {
              "internalType": "address",
              "name": "to",
              "type": "address"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "withdrawETH"
        },
        {
          "inputs": [],
          "stateMutability": "payable",
          "type": "receive"
        }
      ],
      "devdoc": {
        "kind": "dev",
        "methods": {
          "authorizeExecutionDelegate()": {
            "details": "Authorizes execution delegate to perform WETH transactions*"
          },
          "batchBidETH(address[],uint256[],uint256[],address[])": {
            "details": "batch bid purchases the underlying collatearls of a defaulted borrows.",
            "params": {
              "amounts": "the payment amounts",
              "assets": "addresses of the asset contracts used for payment",
              "borrowIds": "the ids of the defaulted borrows",
              "onBehalfOfs": "The addresses to receive the NFTs."
            }
          },
          "batchBorrowETH(uint256[],uint256[],uint256[],uint256[],uint256,address,uint16)": {
            "details": "batch borrow WETH, unwraps to ETH and send both the ETH and DebtTokens to msg.sender, via `approveDelegation` and onBehalf argument in `LendingPool.borrow`.",
            "params": {
              "amounts": "the amounts of ETH to borrow",
              "duration": "The duration of the loans, 0 if open-ended",
              "onBehalfOf": "The address to receive the loans.",
              "referralCode": "integrators are assigned a referral code and can potentially receive rewards",
              "reserveIds": "The ids of the reserves to borrow against. ",
              "tokenIds": "The tokenIds of the ERC721 / ERC1155 tokens to be deposited. ",
              "tokenValues": "The numbers of same-value tokens supplied (0 implies ERC721)"
            }
          },
          "batchDepositETH(uint256[],uint256[],address[],uint16[])": {
            "details": "batch deposits WETH into the reserve, using native ETH.  A corresponding amount of the overlying asset (fTokens) are minted.",
            "params": {
              "amounts": "the amounts to be deposited",
              "onBehalfOfs": "addresses of the users who will receive the fTokens representing the deposit",
              "referralCodes": "integrators are assigned a referral code and can potentially receive rewards.*",
              "reserveIds": "the ids of the target reserves"
            }
          },
          "batchRefinanceETH(uint256[],uint256[],uint256[])": {
            "details": "batch refinances borrows on the WETH reserve, for the specified amount (or for the whole amount, if uint256(-1) is specified).",
            "params": {
              "amounts": "the borrow amounts of the refinanced loans",
              "borrowIds": "the ids of the loans to be refinanced",
              "durations": "The durations of the refinanced loans, 0 if open-ended"
            }
          },
          "batchRepayETH(uint256[],uint256[])": {
            "details": "batch repays a borrow on the WETH reserve, for the specified amount (or for the whole amount, if uint256(-1) is specified).",
            "params": {
              "amounts": "the amounts to repay, or uint256(-1) if the user wants to repay everything",
              "borrowIds": "the ids of the borrows to repay"
            }
          },
          "batchWithdrawETH(uint256[],uint256[],address[])": {
            "details": "batch withdraws the WETH _reserves of msg.sender.",
            "params": {
              "amounts": "amounts of aWETH to withdraw and receive native ETH",
              "reserveIds": "the ids of the target reserves",
              "tos": "addresses of the users who will receive native ETH"
            }
          },
          "bidETH(address,uint256,uint256,address)": {
            "details": "bid purchases the underlying collatearl of a defaulted borrow.",
            "params": {
              "amount": "the payment amount",
              "asset": "address of the asset contract used for payment",
              "borrowId": "the id of the defaulted borrow",
              "onBehalfOf": "The address to receive the NFT."
            }
          },
          "borrowETH(uint256,uint256,uint256,uint256,uint256,address,uint16)": {
            "details": "borrow WETH, unwraps to ETH and send both the ETH and DebtTokens to msg.sender, via `approveDelegation` and onBehalf argument in `LendingPool.borrow`.",
            "params": {
              "amount": "the amount of ETH to borrow",
              "duration": "The duration of the loan, 0 if open-ended",
              "onBehalfOf": "The address to receive the loan.",
              "referralCode": "integrators are assigned a referral code and can potentially receive rewards",
              "reserveId": "The id of the reserve to borrow against. ",
              "tokenId": "The tokenId of the ERC721 / ERC1155 token to be deposited. ",
              "tokenValue": "The number of same-value tokens supplied (0 implies ERC721)"
            }
          },
          "depositETH(uint256,address,uint16)": {
            "details": "deposits WETH into the reserve, using native ETH.  A corresponding amount of the overlying asset (fTokens) are minted.",
            "params": {
              "onBehalfOf": "address of the user who will receive the fTokens representing the deposit",
              "referralCode": "integrators are assigned a referral code and can potentially receive rewards.*",
              "reserveId": "the id of the target reserve"
            }
          },
          "emergencyEtherTransfer(address,uint256)": {
            "details": "transfer native Ether from the utility contract, for native Ether recovery in case of stuck Ether due selfdestructs or transfer ether to pre-computated contract address before deployment.",
            "params": {
              "amount": "amount to send",
              "to": "recipient of the transfer"
            }
          },
          "emergencyTokenTransfer(address,address,uint256)": {
            "details": "transfer ERC20 from the utility contract, for ERC20 recovery in case of stuck tokens due direct transfers to the contract address.",
            "params": {
              "amount": "amount to send",
              "to": "recipient of the transfer",
              "token": "token to transfer"
            }
          },
          "getWETHAddress()": {
            "details": "Get WETH address used by WETHGateway"
          },
          "initialize(address,address)": {
            "details": "Function is invoked by the proxy contract when the WETHGateway contract  is added to the AddressProvider of the market. Sets the WETH address and the AddressesProvider address. ",
            "params": {
              "addressProvider": "The address of the AddressProvider*",
              "weth": "Address of the Wrapped Ether contract"
            }
          },
          "refinanceETH(uint256,uint256,uint256)": {
            "details": "refinances a borrow on the WETH reserve, for the specified amount (or for the whole amount, if uint256(-1) is specified).",
            "params": {
              "amount": "the borrow amount of the refinanced loan",
              "borrowId": "the id of loan to be refinanced",
              "duration": "The duration of the refinanced loan, 0 if open-ended"
            }
          },
          "repayETH(uint256,uint256)": {
            "details": "repays a borrow on the WETH reserve, for the specified amount (or for the whole amount, if uint256(-1) is specified).",
            "params": {
              "amount": "the amount to repay, or uint256(-1) if the user wants to repay everything",
              "borrowId": "the id of the borrow to repay"
            }
          },
          "withdrawETH(uint256,uint256,address)": {
            "details": "withdraws the WETH _reserves of msg.sender.",
            "params": {
              "amount": "amount of aWETH to withdraw and receive native ETH",
              "reserveId": "the id of the target reserve",
              "to": "address of the user who will receive native ETH"
            }
          }
        },
        "version": 1
      },
      "userdoc": {
        "kind": "user",
        "methods": {},
        "version": 1
      }
    },
    "settings": {
      "remappings": [
        ":@chainlink/=lib/chainlink/",
        ":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/",
        ":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/",
        ":chainlink/=lib/chainlink/integration-tests/contracts/ethereum/src/",
        ":ds-test/=lib/forge-std/lib/ds-test/src/",
        ":forge-std/=lib/forge-std/src/"
      ],
      "optimizer": {
        "enabled": true,
        "runs": 200
      },
      "metadata": {
        "bytecodeHash": "ipfs"
      },
      "compilationTarget": {
        "src/protocol/gateways/WETHGateway.sol": "WETHGateway"
      },
      "libraries": {}
    },
    "sources": {
      "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol": {
        "keccak256": "0xe798cadb41e2da274913e4b3183a80f50fb057a42238fe8467e077268100ec27",
        "urls": [
          "bzz-raw://899f850f7df5a270bccfb765d70069959ca1c20d3a7381c1c3bda8a3ffee1935",
          "dweb:/ipfs/QmVdnAqwyX2L3nX2HDA5WKGtVBFyH1nKE9A1k7fZnPBkhP"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts-upgradeable/contracts/security/ReentrancyGuardUpgradeable.sol": {
        "keccak256": "0x2b3005a0064cfc558bdf64b2bae94b565f4574a536aadd61c13838d4f2157790",
        "urls": [
          "bzz-raw://622c3eb87563e71585c9f538d1a196fe2d154dcc5b8f335e8770a8acc95e1f3a",
          "dweb:/ipfs/QmSnDqJJLzv3mirjGB1vrk5X7hegFdS7BKpscpxyqj7sWu"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/IERC20Upgradeable.sol": {
        "keccak256": "0x4e733d3164f73f461eaf9d8087a7ad1ea180bdc8ba0d3d61b0e1ae16d8e63dff",
        "urls": [
          "bzz-raw://75b47c3aeca7b66ea6752f8be020ec5c1c502de6ec9065272dae23d3a52196e2",
          "dweb:/ipfs/QmUebPMHv16tYKFh5BmBQkMfRFb5b8UZ2RgVwdjxCeufVF"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/extensions/IERC20MetadataUpgradeable.sol": {
        "keccak256": "0x605434219ebbe4653f703640f06969faa5a1d78f0bfef878e5ddbb1ca369ceeb",
        "urls": [
          "bzz-raw://4c9c634f99dd02d73ce7498b03a6305e251c05eeebb71457306561c1fab0fa7d",
          "dweb:/ipfs/QmbYRBbZHy8YoaQKXdPryiL3CSS7uUaRfRYi1TUj9cTqJQ"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts-upgradeable/contracts/utils/AddressUpgradeable.sol": {
        "keccak256": "0x2edcb41c121abc510932e8d83ff8b82cf9cdde35e7c297622f5c29ef0af25183",
        "urls": [
          "bzz-raw://72460c66cd1c3b1c11b863e0d8df0a1c56f37743019e468dc312c754f43e3b06",
          "dweb:/ipfs/QmPExYKiNb9PUsgktQBupPaM33kzDHxaYoVeJdLhv8s879"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol": {
        "keccak256": "0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149",
        "urls": [
          "bzz-raw://d6520943ea55fdf5f0bafb39ed909f64de17051bc954ff3e88c9e5621412c79c",
          "dweb:/ipfs/QmWZ4rAKTQbNG2HxGs46AcTXShsVytKeLs7CUCdCSv5N7a"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts/contracts/interfaces/IERC20.sol": {
        "keccak256": "0x6ebf1944ab804b8660eb6fc52f9fe84588cee01c2566a69023e59497e7d27f45",
        "urls": [
          "bzz-raw://2900536cdadec954ced8789a9d1ed4b5e640029e1424e91fd5b88026486f4d45",
          "dweb:/ipfs/QmUMUX7CuYoiHvFkhifqtXGaciw2wnm4t9sAoPzETZ3Gbq"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol": {
        "keccak256": "0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b",
        "urls": [
          "bzz-raw://5a7d5b1ef5d8d5889ad2ed89d8619c09383b80b72ab226e0fe7bde1636481e34",
          "dweb:/ipfs/QmebXWgtEfumQGBdVeM6c71McLixYXQP5Bk6kKXuoY4Bmr"
        ],
        "license": "MIT"
      },
      "src/interfaces/IAddressProvider.sol": {
        "keccak256": "0x6730abfcd8770e3279dad6137bf619ab98ee8b049e6dd85d2fbe87ba6224fde8",
        "urls": [
          "bzz-raw://9b7d1588eab025b049f858ab2f329be7fec220198d956b9b61bf0b9bddc5761a",
          "dweb:/ipfs/QmTaFkYSUfWmbpsyE2TKC1QvP6eTDggZ72ZWodBhydqt5X"
        ],
        "license": "AGPL-3.0"
      },
      "src/interfaces/ICollateralManager.sol": {
        "keccak256": "0xdcb90cae810d15c23e0606ef3d9b30feec7d35e956082b88c1f35c5d6caf6438",
        "urls": [
          "bzz-raw://c45a3cf14add38004018f32987cab971436cfd2e679eea71f2383f845bd68647",
          "dweb:/ipfs/QmPd9df3JmDFMHnhreYWw8tjmRGEQAtERnqj2YREXB5aP5"
        ],
        "license": "AGPL-3.0"
      },
      "src/interfaces/IFToken.sol": {
        "keccak256": "0x4c3ebc83c05720c9257d1b6b4930b647c08ba766b76928622a4c91c4a541a718",
        "urls": [
          "bzz-raw://920cb41d52a659b88030fc3cf84fe5a87cc42f0c6e5c83a691c4732f84906689",
          "dweb:/ipfs/Qma657T4np5eBNono5yBXxE71jfT1TRDDkCPpH3kfw3SxM"
        ],
        "license": "AGPL-3.0"
      },
      "src/interfaces/ILendingPool.sol": {
        "keccak256": "0x345ab4285354bb5184bdd501d7c37920a711215b6f6c2db05b05d585f2454115",
        "urls": [
          "bzz-raw://3b6264b135760dcdd59b9a3566c1305b00084922da177159a85c206ef6a91266",
          "dweb:/ipfs/QmSotEH7zF3vrEgo2gZuunWwroHgc6bw7TVRntzv7jsJn1"
        ],
        "license": "AGPL-3.0"
      },
      "src/interfaces/IPoolIncentivesController.sol": {
        "keccak256": "0x7cb2c32050814e6d6d962a603104facc3bb1dad15171304e3ee756648e8f9ae1",
        "urls": [
          "bzz-raw://cf534f592706b2a61c539c03e5d1e199c15472bcfb4ee69838e5c93ba7914466",
          "dweb:/ipfs/QmPrvXhJigK1Ke51YwAWHon1Kv88WT26iD3MwzCaPDs1Kv"
        ],
        "license": "AGPL-3.0"
      },
      "src/interfaces/IScaledBalanceToken.sol": {
        "keccak256": "0xb6a8f00773c5f58af761573f39f6aa3649c9deec5c4e078f5e3ca78940e4eac7",
        "urls": [
          "bzz-raw://0938c6fd92b015670a2bcf5ff971aafbc6295e07c78d1300c5e36a67002dc70c",
          "dweb:/ipfs/QmYDcxNaAAfnupwDcDN1xtQcCEXTwW1FWiaTiU3MksCQ1Z"
        ],
        "license": "AGPL-3.0"
      },
      "src/interfaces/IWETH.sol": {
        "keccak256": "0x0362c27a2c8e899e736d31c84d7e5d72a9fe722d3b10d7f78f888871bfa908ab",
        "urls": [
          "bzz-raw://c4af992bdb0253a0cfaa392d478381d64c0e0d3834c0709ddeab0b831ee7807d",
          "dweb:/ipfs/QmXaFPzHPFEPXjp6EUFBAcEbybuiSSKa9uSwBMMarm79jy"
        ],
        "license": "AGPL-3.0"
      },
      "src/interfaces/IWETHGateway.sol": {
        "keccak256": "0x831ca4e10b8d5094c6b604e838d0d144aee306027455d0fa74f72f9092bf0a58",
        "urls": [
          "bzz-raw://e216cc7934d2c89de2cd39f5d50b2c812c1fcacc89067537c7787a9a2ec43740",
          "dweb:/ipfs/QmNwFnCpMU3XWHzCx6npHj3gMyXnrDVT6EAzbj9NQNPHMt"
        ],
        "license": "AGPL-3.0"
      },
      "src/protocol/gateways/WETHGateway.sol": {
        "keccak256": "0xff18fc1dfb667afc6f3627e616e926319eee5dbea389defa6fadd176dc7de1d3",
        "urls": [
          "bzz-raw://4e75f36c3ba9c009a3583fbbf4a0aaf1bc993b26fac18c95c9002a04584869b8",
          "dweb:/ipfs/QmVVTbWFF1GkaktG3fahwtXDvsrMCJFGXgmhydiJF7KUU8"
        ],
        "license": "AGPL-3.0"
      },
      "src/protocol/libraries/configuration/ReserveConfiguration.sol": {
        "keccak256": "0xa185efd08f4a3798bbafaa90fafd310f2e29634a2f83b62ee833b31a24232e3c",
        "urls": [
          "bzz-raw://806a0ce876edbbbd418a8297735f66907a06650606b00eac5b510ab082ed3173",
          "dweb:/ipfs/QmQk5ybFrVqXfgXbndYcKBoQiahKScjFEABpJ3ATG8SYPh"
        ],
        "license": "AGPL-3.0"
      },
      "src/protocol/libraries/helpers/Errors.sol": {
        "keccak256": "0x490e76871922e89a13ba0bb88977be18c143fa9d0cd9afb033744a3d81479c52",
        "urls": [
          "bzz-raw://1c409d4d1e1689d8d8f3c3e361198d20f3b6476608c5316d8e2d91f52373e8e3",
          "dweb:/ipfs/QmRZaYpxqjmBpbxb51KqswKYPSeCsU3ejbmk5E3MrMxJaM"
        ],
        "license": "AGPL-3.0"
      },
      "src/protocol/libraries/types/ConfigTypes.sol": {
        "keccak256": "0xa8f9b14d9adf738033fd1847b30012d0e022027614fd6c9bb31a01bc6bfb1634",
        "urls": [
          "bzz-raw://b20c579d1b683dd5977a675c2e46adeebd56c96faa68cda9b0767edf02a5b650",
          "dweb:/ipfs/QmPULpaX2ouktArvXJxYNVPQ9vKBhEeCYA4smo8v57qFLD"
        ],
        "license": "AGPL-3.0"
      },
      "src/protocol/libraries/types/DataTypes.sol": {
        "keccak256": "0x0103c43499e5226d36906042a1723a3ee6ee18ba607cbffc9e776d4dc47edc10",
        "urls": [
          "bzz-raw://550191b44b6ddfe84d81bd5ded46e1ab3ac493399adfca3634fd8348a4a087fa",
          "dweb:/ipfs/QmeoHga9azsBkTRdnzH9USs51JduGR2tgge5YmGW8dJ2Tq"
        ],
        "license": "AGPL-3.0"
      }
    },
    "version": 1
  },
  "ast": {
    "absolutePath": "src/protocol/gateways/WETHGateway.sol",
    "id": 51571,
    "exportedSymbols": {
      "ContextUpgradeable": [
        28988
      ],
      "DataTypes": [
        64253
      ],
      "Errors": [
        56900
      ],
      "IAddressProvider": [
        45420
      ],
      "ICollateralManager": [
        45758
      ],
      "IERC20": [
        33440
      ],
      "IFToken": [
        46422
      ],
      "ILendingPool": [
        47057
      ],
      "IWETH": [
        47802
      ],
      "IWETHGateway": [
        47954
      ],
      "Initializable": [
        26136
      ],
      "ReentrancyGuardUpgradeable": [
        26336
      ],
      "ReserveConfiguration": [
        56503
      ],
      "WETHGateway": [
        51570
      ]
    },
    "nodeType": "SourceUnit",
    "src": "37:17939:118",
    "nodes": [
      {
        "id": 50328,
        "nodeType": "PragmaDirective",
        "src": "37:23:118",
        "nodes": [],
        "literals": [
          "solidity",
          "0.8",
          ".16"
        ]
      },
      {
        "id": 50329,
        "nodeType": "PragmaDirective",
        "src": "61:33:118",
        "nodes": [],
        "literals": [
          "experimental",
          "ABIEncoderV2"
        ]
      },
      {
        "id": 50331,
        "nodeType": "ImportDirective",
        "src": "96:77:118",
        "nodes": [],
        "absolutePath": "src/interfaces/ICollateralManager.sol",
        "file": "../../interfaces/ICollateralManager.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 51571,
        "sourceUnit": 45759,
        "symbolAliases": [
          {
            "foreign": {
              "id": 50330,
              "name": "ICollateralManager",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 45758,
              "src": "105:18:118",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 50333,
        "nodeType": "ImportDirective",
        "src": "174:73:118",
        "nodes": [],
        "absolutePath": "src/interfaces/IAddressProvider.sol",
        "file": "../../interfaces/IAddressProvider.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 51571,
        "sourceUnit": 45421,
        "symbolAliases": [
          {
            "foreign": {
              "id": 50332,
              "name": "IAddressProvider",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 45420,
              "src": "183:16:118",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 50335,
        "nodeType": "ImportDirective",
        "src": "248:65:118",
        "nodes": [],
        "absolutePath": "src/interfaces/IWETHGateway.sol",
        "file": "../../interfaces/IWETHGateway.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 51571,
        "sourceUnit": 47955,
        "symbolAliases": [
          {
            "foreign": {
              "id": 50334,
              "name": "IWETHGateway",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 47954,
              "src": "257:12:118",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 50337,
        "nodeType": "ImportDirective",
        "src": "314:65:118",
        "nodes": [],
        "absolutePath": "src/interfaces/ILendingPool.sol",
        "file": "../../interfaces/ILendingPool.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 51571,
        "sourceUnit": 47058,
        "symbolAliases": [
          {
            "foreign": {
              "id": 50336,
              "name": "ILendingPool",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 47057,
              "src": "323:12:118",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 50339,
        "nodeType": "ImportDirective",
        "src": "380:55:118",
        "nodes": [],
        "absolutePath": "src/interfaces/IFToken.sol",
        "file": "../../interfaces/IFToken.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 51571,
        "sourceUnit": 46423,
        "symbolAliases": [
          {
            "foreign": {
              "id": 50338,
              "name": "IFToken",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 46422,
              "src": "389:7:118",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 50341,
        "nodeType": "ImportDirective",
        "src": "436:51:118",
        "nodes": [],
        "absolutePath": "src/interfaces/IWETH.sol",
        "file": "../../interfaces/IWETH.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 51571,
        "sourceUnit": 47803,
        "symbolAliases": [
          {
            "foreign": {
              "id": 50340,
              "name": "IWETH",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 47802,
              "src": "445:5:118",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 50343,
        "nodeType": "ImportDirective",
        "src": "489:91:118",
        "nodes": [],
        "absolutePath": "src/protocol/libraries/configuration/ReserveConfiguration.sol",
        "file": "../libraries/configuration/ReserveConfiguration.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 51571,
        "sourceUnit": 56504,
        "symbolAliases": [
          {
            "foreign": {
              "id": 50342,
              "name": "ReserveConfiguration",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 56503,
              "src": "498:20:118",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 50345,
        "nodeType": "ImportDirective",
        "src": "581:61:118",
        "nodes": [],
        "absolutePath": "src/protocol/libraries/types/DataTypes.sol",
        "file": "../libraries/types/DataTypes.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 51571,
        "sourceUnit": 64254,
        "symbolAliases": [
          {
            "foreign": {
              "id": 50344,
              "name": "DataTypes",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 64253,
              "src": "590:9:118",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 50347,
        "nodeType": "ImportDirective",
        "src": "643:57:118",
        "nodes": [],
        "absolutePath": "src/protocol/libraries/helpers/Errors.sol",
        "file": "../libraries/helpers/Errors.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 51571,
        "sourceUnit": 56901,
        "symbolAliases": [
          {
            "foreign": {
              "id": 50346,
              "name": "Errors",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 56900,
              "src": "652:6:118",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 50349,
        "nodeType": "ImportDirective",
        "src": "702:71:118",
        "nodes": [],
        "absolutePath": "lib/openzeppelin-contracts/contracts/interfaces/IERC20.sol",
        "file": "@openzeppelin/contracts/interfaces/IERC20.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 51571,
        "sourceUnit": 30664,
        "symbolAliases": [
          {
            "foreign": {
              "id": 50348,
              "name": "IERC20",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 33440,
              "src": "711:6:118",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 50351,
        "nodeType": "ImportDirective",
        "src": "774:98:118",
        "nodes": [],
        "absolutePath": "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol",
        "file": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 51571,
        "sourceUnit": 26137,
        "symbolAliases": [
          {
            "foreign": {
              "id": 50350,
              "name": "Initializable",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 26136,
              "src": "783:13:118",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 50353,
        "nodeType": "ImportDirective",
        "src": "873:102:118",
        "nodes": [],
        "absolutePath": "lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol",
        "file": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 51571,
        "sourceUnit": 28989,
        "symbolAliases": [
          {
            "foreign": {
              "id": 50352,
              "name": "ContextUpgradeable",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 28988,
              "src": "882:18:118",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 50355,
        "nodeType": "ImportDirective",
        "src": "976:121:118",
        "nodes": [],
        "absolutePath": "lib/openzeppelin-contracts-upgradeable/contracts/security/ReentrancyGuardUpgradeable.sol",
        "file": "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 51571,
        "sourceUnit": 26337,
        "symbolAliases": [
          {
            "foreign": {
              "id": 50354,
              "name": "ReentrancyGuardUpgradeable",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 26336,
              "src": "985:26:118",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 51570,
        "nodeType": "ContractDefinition",
        "src": "1099:16876:118",
        "nodes": [
          {
            "id": 50363,
            "nodeType": "UsingForDirective",
            "src": "1162:65:118",
            "nodes": [],
            "global": false,
            "libraryName": {
              "id": 50360,
              "name": "ReserveConfiguration",
              "nameLocations": [
                "1168:20:118"
              ],
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 56503,
              "src": "1168:20:118"
            },
            "typeName": {
              "id": 50362,
              "nodeType": "UserDefinedTypeName",
              "pathNode": {
                "id": 50361,
                "name": "DataTypes.ReserveConfigurationMap",
                "nameLocations": [
                  "1193:9:118",
                  "1203:23:118"
                ],
                "nodeType": "IdentifierPath",
                "referencedDeclaration": 63746,
                "src": "1193:33:118"
              },
              "referencedDeclaration": 63746,
              "src": "1193:33:118",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_ReserveConfigurationMap_$63746_storage_ptr",
                "typeString": "struct DataTypes.ReserveConfigurationMap"
              }
            }
          },
          {
            "id": 50366,
            "nodeType": "VariableDeclaration",
            "src": "1233:18:118",
            "nodes": [],
            "constant": false,
            "mutability": "mutable",
            "name": "WETH",
            "nameLocation": "1247:4:118",
            "scope": 51570,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_IWETH_$47802",
              "typeString": "contract IWETH"
            },
            "typeName": {
              "id": 50365,
              "nodeType": "UserDefinedTypeName",
              "pathNode": {
                "id": 50364,
                "name": "IWETH",
                "nameLocations": [
                  "1233:5:118"
                ],
                "nodeType": "IdentifierPath",
                "referencedDeclaration": 47802,
                "src": "1233:5:118"
              },
              "referencedDeclaration": 47802,
              "src": "1233:5:118",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IWETH_$47802",
                "typeString": "contract IWETH"
              }
            },
            "visibility": "private"
          },
          {
            "id": 50369,
            "nodeType": "VariableDeclaration",
            "src": "1257:41:118",
            "nodes": [],
            "constant": false,
            "mutability": "mutable",
            "name": "_addressProvider",
            "nameLocation": "1282:16:118",
            "scope": 51570,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_IAddressProvider_$45420",
              "typeString": "contract IAddressProvider"
            },
            "typeName": {
              "id": 50368,
              "nodeType": "UserDefinedTypeName",
              "pathNode": {
                "id": 50367,
                "name": "IAddressProvider",
                "nameLocations": [
                  "1257:16:118"
                ],
                "nodeType": "IdentifierPath",
                "referencedDeclaration": 45420,
                "src": "1257:16:118"
              },
              "referencedDeclaration": 45420,
              "src": "1257:16:118",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IAddressProvider_$45420",
                "typeString": "contract IAddressProvider"
              }
            },
            "visibility": "private"
          },
          {
            "id": 50392,
            "nodeType": "FunctionDefinition",
            "src": "1642:175:118",
            "nodes": [],
            "body": {
              "id": 50391,
              "nodeType": "Block",
              "src": "1720:97:118",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "id": 50383,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 50379,
                      "name": "WETH",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 50366,
                      "src": "1730:4:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IWETH_$47802",
                        "typeString": "contract IWETH"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 50381,
                          "name": "weth",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 50372,
                          "src": "1743:4:118",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 50380,
                        "name": "IWETH",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 47802,
                        "src": "1737:5:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_IWETH_$47802_$",
                          "typeString": "type(contract IWETH)"
                        }
                      },
                      "id": 50382,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1737:11:118",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IWETH_$47802",
                        "typeString": "contract IWETH"
                      }
                    },
                    "src": "1730:18:118",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IWETH_$47802",
                      "typeString": "contract IWETH"
                    }
                  },
                  "id": 50384,
                  "nodeType": "ExpressionStatement",
                  "src": "1730:18:118"
                },
                {
                  "expression": {
                    "id": 50389,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 50385,
                      "name": "_addressProvider",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 50369,
                      "src": "1758:16:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IAddressProvider_$45420",
                        "typeString": "contract IAddressProvider"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 50387,
                          "name": "addressProvider",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 50374,
                          "src": "1794:15:118",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 50386,
                        "name": "IAddressProvider",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 45420,
                        "src": "1777:16:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_IAddressProvider_$45420_$",
                          "typeString": "type(contract IAddressProvider)"
                        }
                      },
                      "id": 50388,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1777:33:118",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IAddressProvider_$45420",
                        "typeString": "contract IAddressProvider"
                      }
                    },
                    "src": "1758:52:118",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IAddressProvider_$45420",
                      "typeString": "contract IAddressProvider"
                    }
                  },
                  "id": 50390,
                  "nodeType": "ExpressionStatement",
                  "src": "1758:52:118"
                }
              ]
            },
            "documentation": {
              "id": 50370,
              "nodeType": "StructuredDocumentation",
              "src": "1305:332:118",
              "text": " @dev Function is invoked by the proxy contract when the WETHGateway contract \n is added to the AddressProvider of the market.\n Sets the WETH address and the AddressesProvider address. \n @param weth Address of the Wrapped Ether contract\n @param addressProvider The address of the AddressProvider*"
            },
            "functionSelector": "485cc955",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 50377,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 50376,
                  "name": "initializer",
                  "nameLocations": [
                    "1708:11:118"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 26038,
                  "src": "1708:11:118"
                },
                "nodeType": "ModifierInvocation",
                "src": "1708:11:118"
              }
            ],
            "name": "initialize",
            "nameLocation": "1651:10:118",
            "parameters": {
              "id": 50375,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 50372,
                  "mutability": "mutable",
                  "name": "weth",
                  "nameLocation": "1670:4:118",
                  "nodeType": "VariableDeclaration",
                  "scope": 50392,
                  "src": "1662:12:118",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 50371,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1662:7:118",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 50374,
                  "mutability": "mutable",
                  "name": "addressProvider",
                  "nameLocation": "1684:15:118",
                  "nodeType": "VariableDeclaration",
                  "scope": 50392,
                  "src": "1676:23:118",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 50373,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1676:7:118",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1661:39:118"
            },
            "returnParameters": {
              "id": 50378,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1720:0:118"
            },
            "scope": 51570,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 50407,
            "nodeType": "ModifierDefinition",
            "src": "1823:150:118",
            "nodes": [],
            "body": {
              "id": 50406,
              "nodeType": "Block",
              "src": "1851:122:118",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 50400,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "id": 50395,
                              "name": "_addressProvider",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 50369,
                              "src": "1869:16:118",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IAddressProvider_$45420",
                                "typeString": "contract IAddressProvider"
                              }
                            },
                            "id": 50396,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "1886:15:118",
                            "memberName": "getConfigurator",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 45239,
                            "src": "1869:32:118",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
                              "typeString": "function () view external returns (address)"
                            }
                          },
                          "id": 50397,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1869:34:118",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 50398,
                            "name": "_msgSender",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 28973,
                            "src": "1907:10:118",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                              "typeString": "function () view returns (address)"
                            }
                          },
                          "id": 50399,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1907:12:118",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "1869:50:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "expression": {
                          "id": 50401,
                          "name": "Errors",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 56900,
                          "src": "1921:6:118",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_Errors_$56900_$",
                            "typeString": "type(library Errors)"
                          }
                        },
                        "id": 50402,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberLocation": "1928:26:118",
                        "memberName": "LP_CALLER_NOT_CONFIGURATOR",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 56608,
                        "src": "1921:33:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 50394,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "1861:7:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 50403,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1861:94:118",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 50404,
                  "nodeType": "ExpressionStatement",
                  "src": "1861:94:118"
                },
                {
                  "id": 50405,
                  "nodeType": "PlaceholderStatement",
                  "src": "1965:1:118"
                }
              ]
            },
            "name": "onlyConfigurator",
            "nameLocation": "1832:16:118",
            "parameters": {
              "id": 50393,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1848:2:118"
            },
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 50422,
            "nodeType": "ModifierDefinition",
            "src": "1979:156:118",
            "nodes": [],
            "body": {
              "id": 50421,
              "nodeType": "Block",
              "src": "2007:128:118",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 50415,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "id": 50410,
                              "name": "_addressProvider",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 50369,
                              "src": "2025:16:118",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IAddressProvider_$45420",
                                "typeString": "contract IAddressProvider"
                              }
                            },
                            "id": 50411,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "2042:17:118",
                            "memberName": "getEmergencyAdmin",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 45284,
                            "src": "2025:34:118",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
                              "typeString": "function () view external returns (address)"
                            }
                          },
                          "id": 50412,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2025:36:118",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 50413,
                            "name": "_msgSender",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 28973,
                            "src": "2065:10:118",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                              "typeString": "function () view returns (address)"
                            }
                          },
                          "id": 50414,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2065:12:118",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "2025:52:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "expression": {
                          "id": 50416,
                          "name": "Errors",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 56900,
                          "src": "2079:6:118",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_Errors_$56900_$",
                            "typeString": "type(library Errors)"
                          }
                        },
                        "id": 50417,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberLocation": "2086:30:118",
                        "memberName": "LPC_CALLER_NOT_EMERGENCY_ADMIN",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 56776,
                        "src": "2079:37:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 50409,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "2017:7:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 50418,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2017:100:118",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 50419,
                  "nodeType": "ExpressionStatement",
                  "src": "2017:100:118"
                },
                {
                  "id": 50420,
                  "nodeType": "PlaceholderStatement",
                  "src": "2127:1:118"
                }
              ]
            },
            "name": "onlyEmergencyAdmin",
            "nameLocation": "1988:18:118",
            "parameters": {
              "id": 50408,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2007:0:118"
            },
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 50442,
            "nodeType": "FunctionDefinition",
            "src": "2227:153:118",
            "nodes": [],
            "body": {
              "id": 50441,
              "nodeType": "Block",
              "src": "2291:89:118",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "id": 50431,
                            "name": "_addressProvider",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 50369,
                            "src": "2314:16:118",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IAddressProvider_$45420",
                              "typeString": "contract IAddressProvider"
                            }
                          },
                          "id": 50432,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "2331:20:118",
                          "memberName": "getExecutionDelegate",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 45159,
                          "src": "2314:37:118",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
                            "typeString": "function () view external returns (address)"
                          }
                        },
                        "id": 50433,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2314:39:118",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 50436,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "2360:7:118",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_uint256_$",
                                "typeString": "type(uint256)"
                              },
                              "typeName": {
                                "id": 50435,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "2360:7:118",
                                "typeDescriptions": {}
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_type$_t_uint256_$",
                                "typeString": "type(uint256)"
                              }
                            ],
                            "id": 50434,
                            "name": "type",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -27,
                            "src": "2355:4:118",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                              "typeString": "function () pure"
                            }
                          },
                          "id": 50437,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2355:13:118",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_meta_type_t_uint256",
                            "typeString": "type(uint256)"
                          }
                        },
                        "id": 50438,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberLocation": "2369:3:118",
                        "memberName": "max",
                        "nodeType": "MemberAccess",
                        "src": "2355:17:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 50428,
                        "name": "WETH",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 50366,
                        "src": "2301:4:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IWETH_$47802",
                          "typeString": "contract IWETH"
                        }
                      },
                      "id": 50430,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "2306:7:118",
                      "memberName": "approve",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 47790,
                      "src": "2301:12:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                        "typeString": "function (address,uint256) external returns (bool)"
                      }
                    },
                    "id": 50439,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2301:72:118",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 50440,
                  "nodeType": "ExpressionStatement",
                  "src": "2301:72:118"
                }
              ]
            },
            "baseFunctions": [
              47953
            ],
            "documentation": {
              "id": 50423,
              "nodeType": "StructuredDocumentation",
              "src": "2141:81:118",
              "text": " @dev Authorizes execution delegate to perform WETH transactions*"
            },
            "functionSelector": "caaabc60",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 50426,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 50425,
                  "name": "onlyConfigurator",
                  "nameLocations": [
                    "2274:16:118"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 50407,
                  "src": "2274:16:118"
                },
                "nodeType": "ModifierInvocation",
                "src": "2274:16:118"
              }
            ],
            "name": "authorizeExecutionDelegate",
            "nameLocation": "2236:26:118",
            "parameters": {
              "id": 50424,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2262:2:118"
            },
            "returnParameters": {
              "id": 50427,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2291:0:118"
            },
            "scope": 51570,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 50472,
            "nodeType": "FunctionDefinition",
            "src": "2792:268:118",
            "nodes": [],
            "body": {
              "id": 50471,
              "nodeType": "Block",
              "src": "2928:132:118",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": [],
                        "expression": {
                          "id": 50453,
                          "name": "WETH",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 50366,
                          "src": "2938:4:118",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IWETH_$47802",
                            "typeString": "contract IWETH"
                          }
                        },
                        "id": 50455,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "2943:7:118",
                        "memberName": "deposit",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 47776,
                        "src": "2938:12:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_payable$__$returns$__$",
                          "typeString": "function () payable external"
                        }
                      },
                      "id": 50458,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "names": [
                        "value"
                      ],
                      "nodeType": "FunctionCallOptions",
                      "options": [
                        {
                          "expression": {
                            "id": 50456,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "2958:3:118",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 50457,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "2962:5:118",
                          "memberName": "value",
                          "nodeType": "MemberAccess",
                          "src": "2958:9:118",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "src": "2938:30:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_payable$__$returns$__$value",
                        "typeString": "function () payable external"
                      }
                    },
                    "id": 50459,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2938:32:118",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 50460,
                  "nodeType": "ExpressionStatement",
                  "src": "2938:32:118"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 50464,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "3006:3:118",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 50465,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "3010:5:118",
                        "memberName": "value",
                        "nodeType": "MemberAccess",
                        "src": "3006:9:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 50466,
                        "name": "reserveId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 50445,
                        "src": "3017:9:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 50467,
                        "name": "onBehalfOf",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 50447,
                        "src": "3028:10:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 50468,
                        "name": "referralCode",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 50449,
                        "src": "3040:12:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        }
                      ],
                      "expression": {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 50461,
                          "name": "_getLendingPool",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 51528,
                          "src": "2980:15:118",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_ILendingPool_$47057_$",
                            "typeString": "function () view returns (contract ILendingPool)"
                          }
                        },
                        "id": 50462,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2980:17:118",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ILendingPool_$47057",
                          "typeString": "contract ILendingPool"
                        }
                      },
                      "id": 50463,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "2998:7:118",
                      "memberName": "deposit",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 46721,
                      "src": "2980:25:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_uint256_$_t_uint256_$_t_address_$_t_uint16_$returns$__$",
                        "typeString": "function (uint256,uint256,address,uint16) external"
                      }
                    },
                    "id": 50469,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2980:73:118",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 50470,
                  "nodeType": "ExpressionStatement",
                  "src": "2980:73:118"
                }
              ]
            },
            "baseFunctions": [
              47813
            ],
            "documentation": {
              "id": 50443,
              "nodeType": "StructuredDocumentation",
              "src": "2386:401:118",
              "text": " @dev deposits WETH into the reserve, using native ETH. \n A corresponding amount of the overlying asset (fTokens) are minted.\n @param reserveId the id of the target reserve\n @param onBehalfOf address of the user who will receive the fTokens representing the deposit\n @param referralCode integrators are assigned a referral code and can potentially receive rewards.*"
            },
            "functionSelector": "76e13af1",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "depositETH",
            "nameLocation": "2801:10:118",
            "overrides": {
              "id": 50451,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "2919:8:118"
            },
            "parameters": {
              "id": 50450,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 50445,
                  "mutability": "mutable",
                  "name": "reserveId",
                  "nameLocation": "2829:9:118",
                  "nodeType": "VariableDeclaration",
                  "scope": 50472,
                  "src": "2821:17:118",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 50444,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2821:7:118",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 50447,
                  "mutability": "mutable",
                  "name": "onBehalfOf",
                  "nameLocation": "2856:10:118",
                  "nodeType": "VariableDeclaration",
                  "scope": 50472,
                  "src": "2848:18:118",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 50446,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2848:7:118",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 50449,
                  "mutability": "mutable",
                  "name": "referralCode",
                  "nameLocation": "2883:12:118",
                  "nodeType": "VariableDeclaration",
                  "scope": 50472,
                  "src": "2876:19:118",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  },
                  "typeName": {
                    "id": 50448,
                    "name": "uint16",
                    "nodeType": "ElementaryTypeName",
                    "src": "2876:6:118",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2811:90:118"
            },
            "returnParameters": {
              "id": 50452,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2928:0:118"
            },
            "scope": 51570,
            "stateMutability": "payable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 50578,
            "nodeType": "FunctionDefinition",
            "src": "3535:882:118",
            "nodes": [],
            "body": {
              "id": 50577,
              "nodeType": "Block",
              "src": "3748:669:118",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 50494,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "expression": {
                            "id": 50490,
                            "name": "amounts",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 50476,
                            "src": "3766:7:118",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                              "typeString": "uint256[] calldata"
                            }
                          },
                          "id": 50491,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "3774:6:118",
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "src": "3766:14:118",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "expression": {
                            "id": 50492,
                            "name": "reserveIds",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 50479,
                            "src": "3784:10:118",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                              "typeString": "uint256[] calldata"
                            }
                          },
                          "id": 50493,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "3795:6:118",
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "src": "3784:17:118",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "3766:35:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "65",
                        "id": 50495,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3803:3:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_a8982c89d80987fb9a510e25981ee9170206be21af3c8e0eb312ef1d3382e761",
                          "typeString": "literal_string \"e\""
                        },
                        "value": "e"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_a8982c89d80987fb9a510e25981ee9170206be21af3c8e0eb312ef1d3382e761",
                          "typeString": "literal_string \"e\""
                        }
                      ],
                      "id": 50489,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "3758:7:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 50496,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3758:49:118",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 50497,
                  "nodeType": "ExpressionStatement",
                  "src": "3758:49:118"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 50503,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "expression": {
                            "id": 50499,
                            "name": "amounts",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 50476,
                            "src": "3825:7:118",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                              "typeString": "uint256[] calldata"
                            }
                          },
                          "id": 50500,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "3833:6:118",
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "src": "3825:14:118",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "expression": {
                            "id": 50501,
                            "name": "onBehalfOfs",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 50482,
                            "src": "3843:11:118",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                              "typeString": "address[] calldata"
                            }
                          },
                          "id": 50502,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "3855:6:118",
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "src": "3843:18:118",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "3825:36:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "65",
                        "id": 50504,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3863:3:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_a8982c89d80987fb9a510e25981ee9170206be21af3c8e0eb312ef1d3382e761",
                          "typeString": "literal_string \"e\""
                        },
                        "value": "e"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_a8982c89d80987fb9a510e25981ee9170206be21af3c8e0eb312ef1d3382e761",
                          "typeString": "literal_string \"e\""
                        }
                      ],
                      "id": 50498,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "3817:7:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 50505,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3817:50:118",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 50506,
                  "nodeType": "ExpressionStatement",
                  "src": "3817:50:118"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 50512,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "expression": {
                            "id": 50508,
                            "name": "amounts",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 50476,
                            "src": "3885:7:118",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                              "typeString": "uint256[] calldata"
                            }
                          },
                          "id": 50509,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "3893:6:118",
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "src": "3885:14:118",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "expression": {
                            "id": 50510,
                            "name": "referralCodes",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 50485,
                            "src": "3903:13:118",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint16_$dyn_calldata_ptr",
                              "typeString": "uint16[] calldata"
                            }
                          },
                          "id": 50511,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "3917:6:118",
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "src": "3903:20:118",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "3885:38:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "65",
                        "id": 50513,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3925:3:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_a8982c89d80987fb9a510e25981ee9170206be21af3c8e0eb312ef1d3382e761",
                          "typeString": "literal_string \"e\""
                        },
                        "value": "e"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_a8982c89d80987fb9a510e25981ee9170206be21af3c8e0eb312ef1d3382e761",
                          "typeString": "literal_string \"e\""
                        }
                      ],
                      "id": 50507,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "3877:7:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 50514,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3877:52:118",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 50515,
                  "nodeType": "ExpressionStatement",
                  "src": "3877:52:118"
                },
                {
                  "assignments": [
                    50517
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 50517,
                      "mutability": "mutable",
                      "name": "totalAmount",
                      "nameLocation": "3948:11:118",
                      "nodeType": "VariableDeclaration",
                      "scope": 50577,
                      "src": "3940:19:118",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 50516,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "3940:7:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 50518,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3940:19:118"
                },
                {
                  "body": {
                    "id": 50535,
                    "nodeType": "Block",
                    "src": "4007:50:118",
                    "statements": [
                      {
                        "expression": {
                          "id": 50533,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 50529,
                            "name": "totalAmount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 50517,
                            "src": "4021:11:118",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "baseExpression": {
                              "id": 50530,
                              "name": "amounts",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 50476,
                              "src": "4036:7:118",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                                "typeString": "uint256[] calldata"
                              }
                            },
                            "id": 50532,
                            "indexExpression": {
                              "id": 50531,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 50520,
                              "src": "4044:1:118",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "4036:10:118",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "4021:25:118",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 50534,
                        "nodeType": "ExpressionStatement",
                        "src": "4021:25:118"
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 50525,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 50522,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 50520,
                      "src": "3982:1:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "expression": {
                        "id": 50523,
                        "name": "amounts",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 50476,
                        "src": "3986:7:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                          "typeString": "uint256[] calldata"
                        }
                      },
                      "id": 50524,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "3994:6:118",
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "3986:14:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3982:18:118",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 50536,
                  "initializationExpression": {
                    "assignments": [
                      50520
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 50520,
                        "mutability": "mutable",
                        "name": "i",
                        "nameLocation": "3979:1:118",
                        "nodeType": "VariableDeclaration",
                        "scope": 50536,
                        "src": "3974:6:118",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 50519,
                          "name": "uint",
                          "nodeType": "ElementaryTypeName",
                          "src": "3974:4:118",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 50521,
                    "nodeType": "VariableDeclarationStatement",
                    "src": "3974:6:118"
                  },
                  "loopExpression": {
                    "expression": {
                      "id": 50527,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "4002:3:118",
                      "subExpression": {
                        "id": 50526,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 50520,
                        "src": "4002:1:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 50528,
                    "nodeType": "ExpressionStatement",
                    "src": "4002:3:118"
                  },
                  "nodeType": "ForStatement",
                  "src": "3969:88:118"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 50541,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "expression": {
                            "id": 50538,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "4074:3:118",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 50539,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "4078:5:118",
                          "memberName": "value",
                          "nodeType": "MemberAccess",
                          "src": "4074:9:118",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "id": 50540,
                          "name": "totalAmount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 50517,
                          "src": "4087:11:118",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "4074:24:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "expression": {
                          "id": 50542,
                          "name": "Errors",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 56900,
                          "src": "4100:6:118",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_Errors_$56900_$",
                            "typeString": "type(library Errors)"
                          }
                        },
                        "id": 50543,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberLocation": "4107:41:118",
                        "memberName": "WG_MESSAGE_VALUE_LESS_THAN_PAYMENT_AMOUNT",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 56887,
                        "src": "4100:48:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 50537,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "4066:7:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 50544,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4066:83:118",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 50545,
                  "nodeType": "ExpressionStatement",
                  "src": "4066:83:118"
                },
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": [],
                        "expression": {
                          "id": 50546,
                          "name": "WETH",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 50366,
                          "src": "4159:4:118",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IWETH_$47802",
                            "typeString": "contract IWETH"
                          }
                        },
                        "id": 50548,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "4164:7:118",
                        "memberName": "deposit",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 47776,
                        "src": "4159:12:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_payable$__$returns$__$",
                          "typeString": "function () payable external"
                        }
                      },
                      "id": 50551,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "names": [
                        "value"
                      ],
                      "nodeType": "FunctionCallOptions",
                      "options": [
                        {
                          "expression": {
                            "id": 50549,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "4179:3:118",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 50550,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "4183:5:118",
                          "memberName": "value",
                          "nodeType": "MemberAccess",
                          "src": "4179:9:118",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "src": "4159:30:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_payable$__$returns$__$value",
                        "typeString": "function () payable external"
                      }
                    },
                    "id": 50552,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4159:32:118",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 50553,
                  "nodeType": "ExpressionStatement",
                  "src": "4159:32:118"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 50557,
                        "name": "amounts",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 50476,
                        "src": "4232:7:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                          "typeString": "uint256[] calldata"
                        }
                      },
                      {
                        "id": 50558,
                        "name": "reserveIds",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 50479,
                        "src": "4241:10:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                          "typeString": "uint256[] calldata"
                        }
                      },
                      {
                        "id": 50559,
                        "name": "onBehalfOfs",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 50482,
                        "src": "4253:11:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                          "typeString": "address[] calldata"
                        }
                      },
                      {
                        "id": 50560,
                        "name": "referralCodes",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 50485,
                        "src": "4266:13:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint16_$dyn_calldata_ptr",
                          "typeString": "uint16[] calldata"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                          "typeString": "uint256[] calldata"
                        },
                        {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                          "typeString": "uint256[] calldata"
                        },
                        {
                          "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                          "typeString": "address[] calldata"
                        },
                        {
                          "typeIdentifier": "t_array$_t_uint16_$dyn_calldata_ptr",
                          "typeString": "uint16[] calldata"
                        }
                      ],
                      "expression": {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 50554,
                          "name": "_getLendingPool",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 51528,
                          "src": "4201:15:118",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_ILendingPool_$47057_$",
                            "typeString": "function () view returns (contract ILendingPool)"
                          }
                        },
                        "id": 50555,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4201:17:118",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ILendingPool_$47057",
                          "typeString": "contract ILendingPool"
                        }
                      },
                      "id": 50556,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "4219:12:118",
                      "memberName": "batchDeposit",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 46736,
                      "src": "4201:30:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_address_$dyn_memory_ptr_$_t_array$_t_uint16_$dyn_memory_ptr_$returns$__$",
                        "typeString": "function (uint256[] memory,uint256[] memory,address[] memory,uint16[] memory) external"
                      }
                    },
                    "id": 50561,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4201:79:118",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 50562,
                  "nodeType": "ExpressionStatement",
                  "src": "4201:79:118"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 50566,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 50563,
                        "name": "msg",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -15,
                        "src": "4332:3:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_message",
                          "typeString": "msg"
                        }
                      },
                      "id": 50564,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "4336:5:118",
                      "memberName": "value",
                      "nodeType": "MemberAccess",
                      "src": "4332:9:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "id": 50565,
                      "name": "totalAmount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 50517,
                      "src": "4344:11:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "4332:23:118",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 50576,
                  "nodeType": "IfStatement",
                  "src": "4328:82:118",
                  "trueBody": {
                    "expression": {
                      "arguments": [
                        {
                          "expression": {
                            "id": 50568,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "4374:3:118",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 50569,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "4378:6:118",
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "src": "4374:10:118",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 50573,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "id": 50570,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -15,
                              "src": "4386:3:118",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 50571,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "4390:5:118",
                            "memberName": "value",
                            "nodeType": "MemberAccess",
                            "src": "4386:9:118",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "-",
                          "rightExpression": {
                            "id": 50572,
                            "name": "totalAmount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 50517,
                            "src": "4398:11:118",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "4386:23:118",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 50567,
                        "name": "_safeTransferETH",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51465,
                        "src": "4357:16:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                          "typeString": "function (address,uint256)"
                        }
                      },
                      "id": 50574,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "4357:53:118",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 50575,
                    "nodeType": "ExpressionStatement",
                    "src": "4357:53:118"
                  }
                }
              ]
            },
            "baseFunctions": [
              47828
            ],
            "documentation": {
              "id": 50473,
              "nodeType": "StructuredDocumentation",
              "src": "3066:464:118",
              "text": " @dev batch deposits WETH into the reserve, using native ETH. \n A corresponding amount of the overlying asset (fTokens) are minted.\n @param amounts the amounts to be deposited\n @param reserveIds the ids of the target reserves\n @param onBehalfOfs addresses of the users who will receive the fTokens representing the deposit\n @param referralCodes integrators are assigned a referral code and can potentially receive rewards.*"
            },
            "functionSelector": "1976c7ba",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "batchDepositETH",
            "nameLocation": "3544:15:118",
            "overrides": {
              "id": 50487,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "3739:8:118"
            },
            "parameters": {
              "id": 50486,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 50476,
                  "mutability": "mutable",
                  "name": "amounts",
                  "nameLocation": "3588:7:118",
                  "nodeType": "VariableDeclaration",
                  "scope": 50578,
                  "src": "3569:26:118",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 50474,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "3569:7:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 50475,
                    "nodeType": "ArrayTypeName",
                    "src": "3569:9:118",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 50479,
                  "mutability": "mutable",
                  "name": "reserveIds",
                  "nameLocation": "3624:10:118",
                  "nodeType": "VariableDeclaration",
                  "scope": 50578,
                  "src": "3605:29:118",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 50477,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "3605:7:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 50478,
                    "nodeType": "ArrayTypeName",
                    "src": "3605:9:118",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 50482,
                  "mutability": "mutable",
                  "name": "onBehalfOfs",
                  "nameLocation": "3663:11:118",
                  "nodeType": "VariableDeclaration",
                  "scope": 50578,
                  "src": "3644:30:118",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 50480,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "3644:7:118",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 50481,
                    "nodeType": "ArrayTypeName",
                    "src": "3644:9:118",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 50485,
                  "mutability": "mutable",
                  "name": "referralCodes",
                  "nameLocation": "3702:13:118",
                  "nodeType": "VariableDeclaration",
                  "scope": 50578,
                  "src": "3684:31:118",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint16_$dyn_calldata_ptr",
                    "typeString": "uint16[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 50483,
                      "name": "uint16",
                      "nodeType": "ElementaryTypeName",
                      "src": "3684:6:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint16",
                        "typeString": "uint16"
                      }
                    },
                    "id": 50484,
                    "nodeType": "ArrayTypeName",
                    "src": "3684:8:118",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint16_$dyn_storage_ptr",
                      "typeString": "uint16[]"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3559:162:118"
            },
            "returnParameters": {
              "id": 50488,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3748:0:118"
            },
            "scope": 51570,
            "stateMutability": "payable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 50666,
            "nodeType": "FunctionDefinition",
            "src": "4680:771:118",
            "nodes": [],
            "body": {
              "id": 50665,
              "nodeType": "Block",
              "src": "4796:655:118",
              "nodes": [],
              "statements": [
                {
                  "assignments": [
                    50591
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 50591,
                      "mutability": "mutable",
                      "name": "cachedPool",
                      "nameLocation": "4819:10:118",
                      "nodeType": "VariableDeclaration",
                      "scope": 50665,
                      "src": "4806:23:118",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ILendingPool_$47057",
                        "typeString": "contract ILendingPool"
                      },
                      "typeName": {
                        "id": 50590,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 50589,
                          "name": "ILendingPool",
                          "nameLocations": [
                            "4806:12:118"
                          ],
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 47057,
                          "src": "4806:12:118"
                        },
                        "referencedDeclaration": 47057,
                        "src": "4806:12:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ILendingPool_$47057",
                          "typeString": "contract ILendingPool"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 50594,
                  "initialValue": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 50592,
                      "name": "_getLendingPool",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 51528,
                      "src": "4832:15:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_ILendingPool_$47057_$",
                        "typeString": "function () view returns (contract ILendingPool)"
                      }
                    },
                    "id": 50593,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4832:17:118",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ILendingPool_$47057",
                      "typeString": "contract ILendingPool"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4806:43:118"
                },
                {
                  "assignments": [
                    50597
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 50597,
                      "mutability": "mutable",
                      "name": "fWETH",
                      "nameLocation": "4867:5:118",
                      "nodeType": "VariableDeclaration",
                      "scope": 50665,
                      "src": "4859:13:118",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IFToken_$46422",
                        "typeString": "contract IFToken"
                      },
                      "typeName": {
                        "id": 50596,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 50595,
                          "name": "IFToken",
                          "nameLocations": [
                            "4859:7:118"
                          ],
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 46422,
                          "src": "4859:7:118"
                        },
                        "referencedDeclaration": 46422,
                        "src": "4859:7:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IFToken_$46422",
                          "typeString": "contract IFToken"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 50605,
                  "initialValue": {
                    "arguments": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 50601,
                              "name": "reserveId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 50583,
                              "src": "4905:9:118",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "id": 50599,
                              "name": "cachedPool",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 50591,
                              "src": "4883:10:118",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ILendingPool_$47057",
                                "typeString": "contract ILendingPool"
                              }
                            },
                            "id": 50600,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "4894:10:118",
                            "memberName": "getReserve",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 46969,
                            "src": "4883:21:118",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_uint256_$returns$_t_struct$_Reserve_$63713_memory_ptr_$",
                              "typeString": "function (uint256) view external returns (struct DataTypes.Reserve memory)"
                            }
                          },
                          "id": 50602,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4883:32:118",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Reserve_$63713_memory_ptr",
                            "typeString": "struct DataTypes.Reserve memory"
                          }
                        },
                        "id": 50603,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "4916:13:118",
                        "memberName": "fTokenAddress",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 63686,
                        "src": "4883:46:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 50598,
                      "name": "IFToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 46422,
                      "src": "4875:7:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_IFToken_$46422_$",
                        "typeString": "type(contract IFToken)"
                      }
                    },
                    "id": 50604,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4875:55:118",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IFToken_$46422",
                      "typeString": "contract IFToken"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4859:71:118"
                },
                {
                  "assignments": [
                    50607
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 50607,
                      "mutability": "mutable",
                      "name": "userBalance",
                      "nameLocation": "4948:11:118",
                      "nodeType": "VariableDeclaration",
                      "scope": 50665,
                      "src": "4940:19:118",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 50606,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "4940:7:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 50613,
                  "initialValue": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 50610,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "4978:3:118",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 50611,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "4982:6:118",
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "4978:10:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 50608,
                        "name": "fWETH",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 50597,
                        "src": "4962:5:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IFToken_$46422",
                          "typeString": "contract IFToken"
                        }
                      },
                      "id": 50609,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "4968:9:118",
                      "memberName": "balanceOf",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 27146,
                      "src": "4962:15:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                        "typeString": "function (address) view external returns (uint256)"
                      }
                    },
                    "id": 50612,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4962:27:118",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4940:49:118"
                },
                {
                  "assignments": [
                    50615
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 50615,
                      "mutability": "mutable",
                      "name": "amountToWithdraw",
                      "nameLocation": "5007:16:118",
                      "nodeType": "VariableDeclaration",
                      "scope": 50665,
                      "src": "4999:24:118",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 50614,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "4999:7:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 50617,
                  "initialValue": {
                    "id": 50616,
                    "name": "amount",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 50581,
                    "src": "5026:6:118",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4999:33:118"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 50624,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 50618,
                      "name": "amount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 50581,
                      "src": "5126:6:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "expression": {
                        "arguments": [
                          {
                            "id": 50621,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "5141:7:118",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint256_$",
                              "typeString": "type(uint256)"
                            },
                            "typeName": {
                              "id": 50620,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "5141:7:118",
                              "typeDescriptions": {}
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_type$_t_uint256_$",
                              "typeString": "type(uint256)"
                            }
                          ],
                          "id": 50619,
                          "name": "type",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -27,
                          "src": "5136:4:118",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                            "typeString": "function () pure"
                          }
                        },
                        "id": 50622,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5136:13:118",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_meta_type_t_uint256",
                          "typeString": "type(uint256)"
                        }
                      },
                      "id": 50623,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberLocation": "5150:3:118",
                      "memberName": "max",
                      "nodeType": "MemberAccess",
                      "src": "5136:17:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "5126:27:118",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 50630,
                  "nodeType": "IfStatement",
                  "src": "5122:88:118",
                  "trueBody": {
                    "id": 50629,
                    "nodeType": "Block",
                    "src": "5155:55:118",
                    "statements": [
                      {
                        "expression": {
                          "id": 50627,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 50625,
                            "name": "amountToWithdraw",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 50615,
                            "src": "5169:16:118",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 50626,
                            "name": "userBalance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 50607,
                            "src": "5188:11:118",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "5169:30:118",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 50628,
                        "nodeType": "ExpressionStatement",
                        "src": "5169:30:118"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 50634,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "5238:3:118",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 50635,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "5242:6:118",
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "5238:10:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "id": 50638,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -28,
                            "src": "5258:4:118",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_WETHGateway_$51570",
                              "typeString": "contract WETHGateway"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_WETHGateway_$51570",
                              "typeString": "contract WETHGateway"
                            }
                          ],
                          "id": 50637,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "5250:7:118",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 50636,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "5250:7:118",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 50639,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5250:13:118",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 50640,
                        "name": "amountToWithdraw",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 50615,
                        "src": "5265:16:118",
                        "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": 50631,
                        "name": "fWETH",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 50597,
                        "src": "5219:5:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IFToken_$46422",
                          "typeString": "contract IFToken"
                        }
                      },
                      "id": 50633,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "5225:12:118",
                      "memberName": "transferFrom",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 27188,
                      "src": "5219:18:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$",
                        "typeString": "function (address,address,uint256) external returns (bool)"
                      }
                    },
                    "id": 50641,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5219:63:118",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 50642,
                  "nodeType": "ExpressionStatement",
                  "src": "5219:63:118"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 50646,
                        "name": "amountToWithdraw",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 50615,
                        "src": "5312:16:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 50647,
                        "name": "reserveId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 50583,
                        "src": "5330:9:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "id": 50650,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -28,
                            "src": "5349:4:118",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_WETHGateway_$51570",
                              "typeString": "contract WETHGateway"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_WETHGateway_$51570",
                              "typeString": "contract WETHGateway"
                            }
                          ],
                          "id": 50649,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "5341:7:118",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 50648,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "5341:7:118",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 50651,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5341:13:118",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 50643,
                        "name": "cachedPool",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 50591,
                        "src": "5292:10:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ILendingPool_$47057",
                          "typeString": "contract ILendingPool"
                        }
                      },
                      "id": 50645,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "5303:8:118",
                      "memberName": "withdraw",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 46745,
                      "src": "5292:19:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_uint256_$_t_uint256_$_t_address_$returns$__$",
                        "typeString": "function (uint256,uint256,address) external"
                      }
                    },
                    "id": 50652,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5292:63:118",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 50653,
                  "nodeType": "ExpressionStatement",
                  "src": "5292:63:118"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 50657,
                        "name": "amountToWithdraw",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 50615,
                        "src": "5379:16:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 50654,
                        "name": "WETH",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 50366,
                        "src": "5365:4:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IWETH_$47802",
                          "typeString": "contract IWETH"
                        }
                      },
                      "id": 50656,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "5370:8:118",
                      "memberName": "withdraw",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 47781,
                      "src": "5365:13:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_uint256_$returns$__$",
                        "typeString": "function (uint256) external"
                      }
                    },
                    "id": 50658,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5365:31:118",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 50659,
                  "nodeType": "ExpressionStatement",
                  "src": "5365:31:118"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 50661,
                        "name": "to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 50585,
                        "src": "5423:2:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 50662,
                        "name": "amountToWithdraw",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 50615,
                        "src": "5427:16:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 50660,
                      "name": "_safeTransferETH",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 51465,
                      "src": "5406:16:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256)"
                      }
                    },
                    "id": 50663,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5406:38:118",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 50664,
                  "nodeType": "ExpressionStatement",
                  "src": "5406:38:118"
                }
              ]
            },
            "baseFunctions": [
              47837
            ],
            "documentation": {
              "id": 50579,
              "nodeType": "StructuredDocumentation",
              "src": "4423:252:118",
              "text": " @dev withdraws the WETH _reserves of msg.sender.\n @param amount amount of aWETH to withdraw and receive native ETH\n @param reserveId the id of the target reserve\n @param to address of the user who will receive native ETH"
            },
            "functionSelector": "6a41a61b",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "withdrawETH",
            "nameLocation": "4689:11:118",
            "overrides": {
              "id": 50587,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "4787:8:118"
            },
            "parameters": {
              "id": 50586,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 50581,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "4718:6:118",
                  "nodeType": "VariableDeclaration",
                  "scope": 50666,
                  "src": "4710:14:118",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 50580,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4710:7:118",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 50583,
                  "mutability": "mutable",
                  "name": "reserveId",
                  "nameLocation": "4742:9:118",
                  "nodeType": "VariableDeclaration",
                  "scope": 50666,
                  "src": "4734:17:118",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 50582,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4734:7:118",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 50585,
                  "mutability": "mutable",
                  "name": "to",
                  "nameLocation": "4769:2:118",
                  "nodeType": "VariableDeclaration",
                  "scope": 50666,
                  "src": "4761:10:118",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 50584,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4761:7:118",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4700:77:118"
            },
            "returnParameters": {
              "id": 50588,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4796:0:118"
            },
            "scope": 51570,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 50862,
            "nodeType": "FunctionDefinition",
            "src": "5728:1435:118",
            "nodes": [],
            "body": {
              "id": 50861,
              "nodeType": "Block",
              "src": "5885:1278:118",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 50685,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "expression": {
                            "id": 50681,
                            "name": "amounts",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 50670,
                            "src": "5903:7:118",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                              "typeString": "uint256[] calldata"
                            }
                          },
                          "id": 50682,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "5911:6:118",
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "src": "5903:14:118",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "expression": {
                            "id": 50683,
                            "name": "reserveIds",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 50673,
                            "src": "5921:10:118",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                              "typeString": "uint256[] calldata"
                            }
                          },
                          "id": 50684,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "5932:6:118",
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "src": "5921:17:118",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "5903:35:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "65",
                        "id": 50686,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "5940:3:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_a8982c89d80987fb9a510e25981ee9170206be21af3c8e0eb312ef1d3382e761",
                          "typeString": "literal_string \"e\""
                        },
                        "value": "e"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_a8982c89d80987fb9a510e25981ee9170206be21af3c8e0eb312ef1d3382e761",
                          "typeString": "literal_string \"e\""
                        }
                      ],
                      "id": 50680,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "5895:7:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 50687,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5895:49:118",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 50688,
                  "nodeType": "ExpressionStatement",
                  "src": "5895:49:118"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 50694,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "expression": {
                            "id": 50690,
                            "name": "amounts",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 50670,
                            "src": "5962:7:118",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                              "typeString": "uint256[] calldata"
                            }
                          },
                          "id": 50691,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "5970:6:118",
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "src": "5962:14:118",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "expression": {
                            "id": 50692,
                            "name": "tos",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 50676,
                            "src": "5980:3:118",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                              "typeString": "address[] calldata"
                            }
                          },
                          "id": 50693,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "5984:6:118",
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "src": "5980:10:118",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "5962:28:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "65",
                        "id": 50695,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "5992:3:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_a8982c89d80987fb9a510e25981ee9170206be21af3c8e0eb312ef1d3382e761",
                          "typeString": "literal_string \"e\""
                        },
                        "value": "e"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_a8982c89d80987fb9a510e25981ee9170206be21af3c8e0eb312ef1d3382e761",
                          "typeString": "literal_string \"e\""
                        }
                      ],
                      "id": 50689,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "5954:7:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 50696,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5954:42:118",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 50697,
                  "nodeType": "ExpressionStatement",
                  "src": "5954:42:118"
                },
                {
                  "assignments": [
                    50700
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 50700,
                      "mutability": "mutable",
                      "name": "fWETH",
                      "nameLocation": "6023:5:118",
                      "nodeType": "VariableDeclaration",
                      "scope": 50861,
                      "src": "6015:13:118",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IFToken_$46422",
                        "typeString": "contract IFToken"
                      },
                      "typeName": {
                        "id": 50699,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 50698,
                          "name": "IFToken",
                          "nameLocations": [
                            "6015:7:118"
                          ],
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 46422,
                          "src": "6015:7:118"
                        },
                        "referencedDeclaration": 46422,
                        "src": "6015:7:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IFToken_$46422",
                          "typeString": "contract IFToken"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 50701,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6015:13:118"
                },
                {
                  "assignments": [
                    50703
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 50703,
                      "mutability": "mutable",
                      "name": "userBalance",
                      "nameLocation": "6046:11:118",
                      "nodeType": "VariableDeclaration",
                      "scope": 50861,
                      "src": "6038:19:118",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 50702,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "6038:7:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 50704,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6038:19:118"
                },
                {
                  "assignments": [
                    50706
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 50706,
                      "mutability": "mutable",
                      "name": "totalAmountToWithdraw",
                      "nameLocation": "6077:21:118",
                      "nodeType": "VariableDeclaration",
                      "scope": 50861,
                      "src": "6069:29:118",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 50705,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "6069:7:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 50707,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6069:29:118"
                },
                {
                  "assignments": [
                    50712
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 50712,
                      "mutability": "mutable",
                      "name": "tos_",
                      "nameLocation": "6126:4:118",
                      "nodeType": "VariableDeclaration",
                      "scope": 50861,
                      "src": "6109:21:118",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                        "typeString": "address[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 50710,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "6109:7:118",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 50711,
                        "nodeType": "ArrayTypeName",
                        "src": "6109:9:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                          "typeString": "address[]"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 50719,
                  "initialValue": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 50716,
                          "name": "amounts",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 50670,
                          "src": "6147:7:118",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                            "typeString": "uint256[] calldata"
                          }
                        },
                        "id": 50717,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "6155:6:118",
                        "memberName": "length",
                        "nodeType": "MemberAccess",
                        "src": "6147:14:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 50715,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "NewExpression",
                      "src": "6133:13:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_address_$dyn_memory_ptr_$",
                        "typeString": "function (uint256) pure returns (address[] memory)"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 50713,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "6137:7:118",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 50714,
                        "nodeType": "ArrayTypeName",
                        "src": "6137:9:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                          "typeString": "address[]"
                        }
                      }
                    },
                    "id": 50718,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6133:29:118",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                      "typeString": "address[] memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6109:53:118"
                },
                {
                  "assignments": [
                    50724
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 50724,
                      "mutability": "mutable",
                      "name": "amountToWithdraw",
                      "nameLocation": "6189:16:118",
                      "nodeType": "VariableDeclaration",
                      "scope": 50861,
                      "src": "6172:33:118",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                        "typeString": "uint256[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 50722,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "6172:7:118",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 50723,
                        "nodeType": "ArrayTypeName",
                        "src": "6172:9:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                          "typeString": "uint256[]"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 50731,
                  "initialValue": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 50728,
                          "name": "amounts",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 50670,
                          "src": "6222:7:118",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                            "typeString": "uint256[] calldata"
                          }
                        },
                        "id": 50729,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "6230:6:118",
                        "memberName": "length",
                        "nodeType": "MemberAccess",
                        "src": "6222:14:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 50727,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "NewExpression",
                      "src": "6208:13:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$",
                        "typeString": "function (uint256) pure returns (uint256[] memory)"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 50725,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "6212:7:118",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 50726,
                        "nodeType": "ArrayTypeName",
                        "src": "6212:9:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                          "typeString": "uint256[]"
                        }
                      }
                    },
                    "id": 50730,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6208:29:118",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                      "typeString": "uint256[] memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6172:65:118"
                },
                {
                  "assignments": [
                    50734
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 50734,
                      "mutability": "mutable",
                      "name": "cachedPool",
                      "nameLocation": "6269:10:118",
                      "nodeType": "VariableDeclaration",
                      "scope": 50861,
                      "src": "6256:23:118",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ILendingPool_$47057",
                        "typeString": "contract ILendingPool"
                      },
                      "typeName": {
                        "id": 50733,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 50732,
                          "name": "ILendingPool",
                          "nameLocations": [
                            "6256:12:118"
                          ],
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 47057,
                          "src": "6256:12:118"
                        },
                        "referencedDeclaration": 47057,
                        "src": "6256:12:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ILendingPool_$47057",
                          "typeString": "contract ILendingPool"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 50737,
                  "initialValue": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 50735,
                      "name": "_getLendingPool",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 51528,
                      "src": "6282:15:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_ILendingPool_$47057_$",
                        "typeString": "function () view returns (contract ILendingPool)"
                      }
                    },
                    "id": 50736,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6282:17:118",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ILendingPool_$47057",
                      "typeString": "contract ILendingPool"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6256:43:118"
                },
                {
                  "body": {
                    "id": 50823,
                    "nodeType": "Block",
                    "src": "6352:569:118",
                    "statements": [
                      {
                        "expression": {
                          "id": 50759,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 50749,
                            "name": "fWETH",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 50700,
                            "src": "6366:5:118",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IFToken_$46422",
                              "typeString": "contract IFToken"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "expression": {
                                  "arguments": [
                                    {
                                      "baseExpression": {
                                        "id": 50753,
                                        "name": "reserveIds",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 50673,
                                        "src": "6404:10:118",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                                          "typeString": "uint256[] calldata"
                                        }
                                      },
                                      "id": 50755,
                                      "indexExpression": {
                                        "id": 50754,
                                        "name": "i",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 50739,
                                        "src": "6415:1:118",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "IndexAccess",
                                      "src": "6404:13:118",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "expression": {
                                      "id": 50751,
                                      "name": "cachedPool",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 50734,
                                      "src": "6382:10:118",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_ILendingPool_$47057",
                                        "typeString": "contract ILendingPool"
                                      }
                                    },
                                    "id": 50752,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberLocation": "6393:10:118",
                                    "memberName": "getReserve",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 46969,
                                    "src": "6382:21:118",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_external_view$_t_uint256_$returns$_t_struct$_Reserve_$63713_memory_ptr_$",
                                      "typeString": "function (uint256) view external returns (struct DataTypes.Reserve memory)"
                                    }
                                  },
                                  "id": 50756,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "nameLocations": [],
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "6382:36:118",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Reserve_$63713_memory_ptr",
                                    "typeString": "struct DataTypes.Reserve memory"
                                  }
                                },
                                "id": 50757,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberLocation": "6419:13:118",
                                "memberName": "fTokenAddress",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 63686,
                                "src": "6382:50:118",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 50750,
                              "name": "IFToken",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 46422,
                              "src": "6374:7:118",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_IFToken_$46422_$",
                                "typeString": "type(contract IFToken)"
                              }
                            },
                            "id": 50758,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "6374:59:118",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IFToken_$46422",
                              "typeString": "contract IFToken"
                            }
                          },
                          "src": "6366:67:118",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IFToken_$46422",
                            "typeString": "contract IFToken"
                          }
                        },
                        "id": 50760,
                        "nodeType": "ExpressionStatement",
                        "src": "6366:67:118"
                      },
                      {
                        "expression": {
                          "id": 50767,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 50761,
                            "name": "userBalance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 50703,
                            "src": "6447:11:118",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "expression": {
                                  "id": 50764,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -15,
                                  "src": "6477:3:118",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 50765,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberLocation": "6481:6:118",
                                "memberName": "sender",
                                "nodeType": "MemberAccess",
                                "src": "6477:10:118",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "expression": {
                                "id": 50762,
                                "name": "fWETH",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 50700,
                                "src": "6461:5:118",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_IFToken_$46422",
                                  "typeString": "contract IFToken"
                                }
                              },
                              "id": 50763,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "6467:9:118",
                              "memberName": "balanceOf",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 27146,
                              "src": "6461:15:118",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                                "typeString": "function (address) view external returns (uint256)"
                              }
                            },
                            "id": 50766,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "6461:27:118",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "6447:41:118",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 50768,
                        "nodeType": "ExpressionStatement",
                        "src": "6447:41:118"
                      },
                      {
                        "expression": {
                          "id": 50775,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 50769,
                              "name": "amountToWithdraw",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 50724,
                              "src": "6502:16:118",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                "typeString": "uint256[] memory"
                              }
                            },
                            "id": 50771,
                            "indexExpression": {
                              "id": 50770,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 50739,
                              "src": "6519:1:118",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "6502:19:118",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "baseExpression": {
                              "id": 50772,
                              "name": "amounts",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 50670,
                              "src": "6524:7:118",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                                "typeString": "uint256[] calldata"
                              }
                            },
                            "id": 50774,
                            "indexExpression": {
                              "id": 50773,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 50739,
                              "src": "6532:1:118",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "6524:10:118",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "6502:32:118",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 50776,
                        "nodeType": "ExpressionStatement",
                        "src": "6502:32:118"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 50785,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "baseExpression": {
                              "id": 50777,
                              "name": "amounts",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 50670,
                              "src": "6636:7:118",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                                "typeString": "uint256[] calldata"
                              }
                            },
                            "id": 50779,
                            "indexExpression": {
                              "id": 50778,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 50739,
                              "src": "6644:1:118",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "6636:10:118",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "expression": {
                              "arguments": [
                                {
                                  "id": 50782,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "6655:7:118",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint256_$",
                                    "typeString": "type(uint256)"
                                  },
                                  "typeName": {
                                    "id": 50781,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "6655:7:118",
                                    "typeDescriptions": {}
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_type$_t_uint256_$",
                                    "typeString": "type(uint256)"
                                  }
                                ],
                                "id": 50780,
                                "name": "type",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -27,
                                "src": "6650:4:118",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                  "typeString": "function () pure"
                                }
                              },
                              "id": 50783,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "6650:13:118",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_meta_type_t_uint256",
                                "typeString": "type(uint256)"
                              }
                            },
                            "id": 50784,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberLocation": "6664:3:118",
                            "memberName": "max",
                            "nodeType": "MemberAccess",
                            "src": "6650:17:118",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "6636:31:118",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 50793,
                        "nodeType": "IfStatement",
                        "src": "6632:103:118",
                        "trueBody": {
                          "id": 50792,
                          "nodeType": "Block",
                          "src": "6669:66:118",
                          "statements": [
                            {
                              "expression": {
                                "id": 50790,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "baseExpression": {
                                    "id": 50786,
                                    "name": "amountToWithdraw",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 50724,
                                    "src": "6687:16:118",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                      "typeString": "uint256[] memory"
                                    }
                                  },
                                  "id": 50788,
                                  "indexExpression": {
                                    "id": 50787,
                                    "name": "i",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 50739,
                                    "src": "6704:1:118",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "nodeType": "IndexAccess",
                                  "src": "6687:19:118",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "id": 50789,
                                  "name": "userBalance",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 50703,
                                  "src": "6709:11:118",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "6687:33:118",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 50791,
                              "nodeType": "ExpressionStatement",
                              "src": "6687:33:118"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "id": 50798,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 50794,
                            "name": "totalAmountToWithdraw",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 50706,
                            "src": "6748:21:118",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "baseExpression": {
                              "id": 50795,
                              "name": "amountToWithdraw",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 50724,
                              "src": "6773:16:118",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                "typeString": "uint256[] memory"
                              }
                            },
                            "id": 50797,
                            "indexExpression": {
                              "id": 50796,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 50739,
                              "src": "6790:1:118",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "6773:19:118",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "6748:44:118",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 50799,
                        "nodeType": "ExpressionStatement",
                        "src": "6748:44:118"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 50803,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "6826:3:118",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 50804,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "6830:6:118",
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "src": "6826:10:118",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "arguments": [
                                {
                                  "id": 50807,
                                  "name": "this",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -28,
                                  "src": "6846:4:118",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_WETHGateway_$51570",
                                    "typeString": "contract WETHGateway"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_WETHGateway_$51570",
                                    "typeString": "contract WETHGateway"
                                  }
                                ],
                                "id": 50806,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "6838:7:118",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 50805,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "6838:7:118",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 50808,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "6838:13:118",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "baseExpression": {
                                "id": 50809,
                                "name": "amountToWithdraw",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 50724,
                                "src": "6853:16:118",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                  "typeString": "uint256[] memory"
                                }
                              },
                              "id": 50811,
                              "indexExpression": {
                                "id": 50810,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 50739,
                                "src": "6870:1:118",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "6853:19:118",
                              "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": 50800,
                              "name": "fWETH",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 50700,
                              "src": "6807:5:118",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IFToken_$46422",
                                "typeString": "contract IFToken"
                              }
                            },
                            "id": 50802,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "6813:12:118",
                            "memberName": "transferFrom",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 27188,
                            "src": "6807:18:118",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$",
                              "typeString": "function (address,address,uint256) external returns (bool)"
                            }
                          },
                          "id": 50812,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6807:66:118",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 50813,
                        "nodeType": "ExpressionStatement",
                        "src": "6807:66:118"
                      },
                      {
                        "expression": {
                          "id": 50821,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 50814,
                              "name": "tos_",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 50712,
                              "src": "6887:4:118",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                "typeString": "address[] memory"
                              }
                            },
                            "id": 50816,
                            "indexExpression": {
                              "id": 50815,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 50739,
                              "src": "6892:1:118",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "6887:7:118",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 50819,
                                "name": "this",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -28,
                                "src": "6905:4:118",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_WETHGateway_$51570",
                                  "typeString": "contract WETHGateway"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_WETHGateway_$51570",
                                  "typeString": "contract WETHGateway"
                                }
                              ],
                              "id": 50818,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "6897:7:118",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 50817,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "6897:7:118",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 50820,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "6897:13:118",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "6887:23:118",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 50822,
                        "nodeType": "ExpressionStatement",
                        "src": "6887:23:118"
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 50745,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 50742,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 50739,
                      "src": "6327:1:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "expression": {
                        "id": 50743,
                        "name": "amounts",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 50670,
                        "src": "6331:7:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                          "typeString": "uint256[] calldata"
                        }
                      },
                      "id": 50744,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "6339:6:118",
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "6331:14:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "6327:18:118",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 50824,
                  "initializationExpression": {
                    "assignments": [
                      50739
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 50739,
                        "mutability": "mutable",
                        "name": "i",
                        "nameLocation": "6320:1:118",
                        "nodeType": "VariableDeclaration",
                        "scope": 50824,
                        "src": "6315:6:118",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 50738,
                          "name": "uint",
                          "nodeType": "ElementaryTypeName",
                          "src": "6315:4:118",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 50741,
                    "initialValue": {
                      "hexValue": "30",
                      "id": 50740,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "6324:1:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "6315:10:118"
                  },
                  "loopExpression": {
                    "expression": {
                      "id": 50747,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "6347:3:118",
                      "subExpression": {
                        "id": 50746,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 50739,
                        "src": "6347:1:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 50748,
                    "nodeType": "ExpressionStatement",
                    "src": "6347:3:118"
                  },
                  "nodeType": "ForStatement",
                  "src": "6310:611:118"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 50828,
                        "name": "amountToWithdraw",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 50724,
                        "src": "6956:16:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[] memory"
                        }
                      },
                      {
                        "id": 50829,
                        "name": "reserveIds",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 50673,
                        "src": "6974:10:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                          "typeString": "uint256[] calldata"
                        }
                      },
                      {
                        "id": 50830,
                        "name": "tos_",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 50712,
                        "src": "6986:4:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[] memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[] memory"
                        },
                        {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                          "typeString": "uint256[] calldata"
                        },
                        {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[] memory"
                        }
                      ],
                      "expression": {
                        "id": 50825,
                        "name": "cachedPool",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 50734,
                        "src": "6931:10:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ILendingPool_$47057",
                          "typeString": "contract ILendingPool"
                        }
                      },
                      "id": 50827,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "6942:13:118",
                      "memberName": "batchWithdraw",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 46757,
                      "src": "6931:24:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_address_$dyn_memory_ptr_$returns$__$",
                        "typeString": "function (uint256[] memory,uint256[] memory,address[] memory) external"
                      }
                    },
                    "id": 50831,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6931:60:118",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 50832,
                  "nodeType": "ExpressionStatement",
                  "src": "6931:60:118"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 50836,
                        "name": "totalAmountToWithdraw",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 50706,
                        "src": "7015:21:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 50833,
                        "name": "WETH",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 50366,
                        "src": "7001:4:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IWETH_$47802",
                          "typeString": "contract IWETH"
                        }
                      },
                      "id": 50835,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "7006:8:118",
                      "memberName": "withdraw",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 47781,
                      "src": "7001:13:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_uint256_$returns$__$",
                        "typeString": "function (uint256) external"
                      }
                    },
                    "id": 50837,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7001:36:118",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 50838,
                  "nodeType": "ExpressionStatement",
                  "src": "7001:36:118"
                },
                {
                  "body": {
                    "id": 50859,
                    "nodeType": "Block",
                    "src": "7086:70:118",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "baseExpression": {
                                "id": 50851,
                                "name": "tos",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 50676,
                                "src": "7117:3:118",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                  "typeString": "address[] calldata"
                                }
                              },
                              "id": 50853,
                              "indexExpression": {
                                "id": 50852,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 50840,
                                "src": "7121:1:118",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "7117:6:118",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "baseExpression": {
                                "id": 50854,
                                "name": "amountToWithdraw",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 50724,
                                "src": "7125:16:118",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                  "typeString": "uint256[] memory"
                                }
                              },
                              "id": 50856,
                              "indexExpression": {
                                "id": 50855,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 50840,
                                "src": "7142:1:118",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "7125:19:118",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 50850,
                            "name": "_safeTransferETH",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 51465,
                            "src": "7100:16:118",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256)"
                            }
                          },
                          "id": 50857,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7100:45:118",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 50858,
                        "nodeType": "ExpressionStatement",
                        "src": "7100:45:118"
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 50846,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 50843,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 50840,
                      "src": "7065:1:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "expression": {
                        "id": 50844,
                        "name": "tos",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 50676,
                        "src": "7069:3:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                          "typeString": "address[] calldata"
                        }
                      },
                      "id": 50845,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "7073:6:118",
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "7069:10:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "7065:14:118",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 50860,
                  "initializationExpression": {
                    "assignments": [
                      50840
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 50840,
                        "mutability": "mutable",
                        "name": "i",
                        "nameLocation": "7058:1:118",
                        "nodeType": "VariableDeclaration",
                        "scope": 50860,
                        "src": "7053:6:118",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 50839,
                          "name": "uint",
                          "nodeType": "ElementaryTypeName",
                          "src": "7053:4:118",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 50842,
                    "initialValue": {
                      "hexValue": "30",
                      "id": 50841,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "7062:1:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "7053:10:118"
                  },
                  "loopExpression": {
                    "expression": {
                      "id": 50848,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "7081:3:118",
                      "subExpression": {
                        "id": 50847,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 50840,
                        "src": "7081:1:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 50849,
                    "nodeType": "ExpressionStatement",
                    "src": "7081:3:118"
                  },
                  "nodeType": "ForStatement",
                  "src": "7048:108:118"
                }
              ]
            },
            "baseFunctions": [
              47849
            ],
            "documentation": {
              "id": 50667,
              "nodeType": "StructuredDocumentation",
              "src": "5457:266:118",
              "text": " @dev batch withdraws the WETH _reserves of msg.sender.\n @param amounts amounts of aWETH to withdraw and receive native ETH\n @param reserveIds the ids of the target reserves\n @param tos addresses of the users who will receive native ETH"
            },
            "functionSelector": "ced46f82",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "batchWithdrawETH",
            "nameLocation": "5737:16:118",
            "overrides": {
              "id": 50678,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "5876:8:118"
            },
            "parameters": {
              "id": 50677,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 50670,
                  "mutability": "mutable",
                  "name": "amounts",
                  "nameLocation": "5782:7:118",
                  "nodeType": "VariableDeclaration",
                  "scope": 50862,
                  "src": "5763:26:118",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 50668,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "5763:7:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 50669,
                    "nodeType": "ArrayTypeName",
                    "src": "5763:9:118",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 50673,
                  "mutability": "mutable",
                  "name": "reserveIds",
                  "nameLocation": "5818:10:118",
                  "nodeType": "VariableDeclaration",
                  "scope": 50862,
                  "src": "5799:29:118",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 50671,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "5799:7:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 50672,
                    "nodeType": "ArrayTypeName",
                    "src": "5799:9:118",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 50676,
                  "mutability": "mutable",
                  "name": "tos",
                  "nameLocation": "5857:3:118",
                  "nodeType": "VariableDeclaration",
                  "scope": 50862,
                  "src": "5838:22:118",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 50674,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "5838:7:118",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 50675,
                    "nodeType": "ArrayTypeName",
                    "src": "5838:9:118",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5753:113:118"
            },
            "returnParameters": {
              "id": 50679,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5885:0:118"
            },
            "scope": 51570,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 50906,
            "nodeType": "FunctionDefinition",
            "src": "7847:521:118",
            "nodes": [],
            "body": {
              "id": 50905,
              "nodeType": "Block",
              "src": "8077:291:118",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 50884,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 50865,
                        "src": "8128:6:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 50885,
                        "name": "tokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 50867,
                        "src": "8148:7:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 50886,
                        "name": "tokenValue",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 50869,
                        "src": "8169:10:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 50887,
                        "name": "reserveId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 50871,
                        "src": "8193:9:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 50888,
                        "name": "duration",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 50873,
                        "src": "8216:8:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 50889,
                        "name": "onBehalfOf",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 50875,
                        "src": "8238:10:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 50890,
                        "name": "referralCode",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 50877,
                        "src": "8262:12:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        }
                      ],
                      "expression": {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 50881,
                          "name": "_getLendingPool",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 51528,
                          "src": "8090:15:118",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_ILendingPool_$47057_$",
                            "typeString": "function () view returns (contract ILendingPool)"
                          }
                        },
                        "id": 50882,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "8090:17:118",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ILendingPool_$47057",
                          "typeString": "contract ILendingPool"
                        }
                      },
                      "id": 50883,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "8108:6:118",
                      "memberName": "borrow",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 46774,
                      "src": "8090:24:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_address_$_t_uint16_$returns$__$",
                        "typeString": "function (uint256,uint256,uint256,uint256,uint256,address,uint16) external"
                      }
                    },
                    "id": 50891,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8090:194:118",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 50892,
                  "nodeType": "ExpressionStatement",
                  "src": "8090:194:118"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 50896,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 50865,
                        "src": "8308:6:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 50893,
                        "name": "WETH",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 50366,
                        "src": "8294:4:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IWETH_$47802",
                          "typeString": "contract IWETH"
                        }
                      },
                      "id": 50895,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "8299:8:118",
                      "memberName": "withdraw",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 47781,
                      "src": "8294:13:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_uint256_$returns$__$",
                        "typeString": "function (uint256) external"
                      }
                    },
                    "id": 50897,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8294:21:118",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 50898,
                  "nodeType": "ExpressionStatement",
                  "src": "8294:21:118"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 50900,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "8342:3:118",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 50901,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "8346:6:118",
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "8342:10:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 50902,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 50865,
                        "src": "8354:6:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 50899,
                      "name": "_safeTransferETH",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 51465,
                      "src": "8325:16:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256)"
                      }
                    },
                    "id": 50903,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8325:36:118",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 50904,
                  "nodeType": "ExpressionStatement",
                  "src": "8325:36:118"
                }
              ]
            },
            "baseFunctions": [
              47866
            ],
            "documentation": {
              "id": 50863,
              "nodeType": "StructuredDocumentation",
              "src": "7168:674:118",
              "text": " @dev borrow WETH, unwraps to ETH and send both the ETH and DebtTokens to msg.sender, via `approveDelegation` and onBehalf argument in `LendingPool.borrow`.\n @param amount the amount of ETH to borrow\n @param tokenId The tokenId of the ERC721 / ERC1155 token to be deposited. \n @param tokenValue The number of same-value tokens supplied (0 implies ERC721)\n @param reserveId The id of the reserve to borrow against. \n @param duration The duration of the loan, 0 if open-ended\n @param onBehalfOf The address to receive the loan.\n @param referralCode integrators are assigned a referral code and can potentially receive rewards"
            },
            "functionSelector": "35f9a701",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "borrowETH",
            "nameLocation": "7856:9:118",
            "overrides": {
              "id": 50879,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "8068:8:118"
            },
            "parameters": {
              "id": 50878,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 50865,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "7883:6:118",
                  "nodeType": "VariableDeclaration",
                  "scope": 50906,
                  "src": "7875:14:118",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 50864,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7875:7:118",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 50867,
                  "mutability": "mutable",
                  "name": "tokenId",
                  "nameLocation": "7907:7:118",
                  "nodeType": "VariableDeclaration",
                  "scope": 50906,
                  "src": "7899:15:118",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 50866,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7899:7:118",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 50869,
                  "mutability": "mutable",
                  "name": "tokenValue",
                  "nameLocation": "7932:10:118",
                  "nodeType": "VariableDeclaration",
                  "scope": 50906,
                  "src": "7924:18:118",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 50868,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7924:7:118",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 50871,
                  "mutability": "mutable",
                  "name": "reserveId",
                  "nameLocation": "7960:9:118",
                  "nodeType": "VariableDeclaration",
                  "scope": 50906,
                  "src": "7952:17:118",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 50870,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7952:7:118",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 50873,
                  "mutability": "mutable",
                  "name": "duration",
                  "nameLocation": "7987:8:118",
                  "nodeType": "VariableDeclaration",
                  "scope": 50906,
                  "src": "7979:16:118",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 50872,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7979:7:118",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 50875,
                  "mutability": "mutable",
                  "name": "onBehalfOf",
                  "nameLocation": "8013:10:118",
                  "nodeType": "VariableDeclaration",
                  "scope": 50906,
                  "src": "8005:18:118",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 50874,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8005:7:118",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 50877,
                  "mutability": "mutable",
                  "name": "referralCode",
                  "nameLocation": "8040:12:118",
                  "nodeType": "VariableDeclaration",
                  "scope": 50906,
                  "src": "8033:19:118",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  },
                  "typeName": {
                    "id": 50876,
                    "name": "uint16",
                    "nodeType": "ElementaryTypeName",
                    "src": "8033:6:118",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7865:193:118"
            },
            "returnParameters": {
              "id": 50880,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8077:0:118"
            },
            "scope": 51570,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 50975,
            "nodeType": "FunctionDefinition",
            "src": "9070:724:118",
            "nodes": [],
            "body": {
              "id": 50974,
              "nodeType": "Block",
              "src": "9353:441:118",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 50932,
                        "name": "amounts",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 50910,
                        "src": "9412:7:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                          "typeString": "uint256[] calldata"
                        }
                      },
                      {
                        "id": 50933,
                        "name": "tokenIds",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 50913,
                        "src": "9433:8:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                          "typeString": "uint256[] calldata"
                        }
                      },
                      {
                        "id": 50934,
                        "name": "tokenValues",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 50916,
                        "src": "9455:11:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                          "typeString": "uint256[] calldata"
                        }
                      },
                      {
                        "id": 50935,
                        "name": "reserveIds",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 50919,
                        "src": "9480:10:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                          "typeString": "uint256[] calldata"
                        }
                      },
                      {
                        "id": 50936,
                        "name": "duration",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 50921,
                        "src": "9504:8:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 50937,
                        "name": "onBehalfOf",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 50923,
                        "src": "9526:10:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 50938,
                        "name": "referralCode",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 50925,
                        "src": "9550:12:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                          "typeString": "uint256[] calldata"
                        },
                        {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                          "typeString": "uint256[] calldata"
                        },
                        {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                          "typeString": "uint256[] calldata"
                        },
                        {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                          "typeString": "uint256[] calldata"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        }
                      ],
                      "expression": {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 50929,
                          "name": "_getLendingPool",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 51528,
                          "src": "9369:15:118",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_ILendingPool_$47057_$",
                            "typeString": "function () view returns (contract ILendingPool)"
                          }
                        },
                        "id": 50930,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "9369:17:118",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ILendingPool_$47057",
                          "typeString": "contract ILendingPool"
                        }
                      },
                      "id": 50931,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "9387:11:118",
                      "memberName": "batchBorrow",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 46795,
                      "src": "9369:29:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_address_$_t_uint16_$returns$__$",
                        "typeString": "function (uint256[] memory,uint256[] memory,uint256[] memory,uint256[] memory,uint256,address,uint16) external"
                      }
                    },
                    "id": 50939,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9369:203:118",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 50940,
                  "nodeType": "ExpressionStatement",
                  "src": "9369:203:118"
                },
                {
                  "assignments": [
                    50942
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 50942,
                      "mutability": "mutable",
                      "name": "totalAmount",
                      "nameLocation": "9591:11:118",
                      "nodeType": "VariableDeclaration",
                      "scope": 50974,
                      "src": "9583:19:118",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 50941,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "9583:7:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 50943,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "9583:19:118"
                },
                {
                  "body": {
                    "id": 50960,
                    "nodeType": "Block",
                    "src": "9651:50:118",
                    "statements": [
                      {
                        "expression": {
                          "id": 50958,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 50954,
                            "name": "totalAmount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 50942,
                            "src": "9665:11:118",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "baseExpression": {
                              "id": 50955,
                              "name": "amounts",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 50910,
                              "src": "9680:7:118",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                                "typeString": "uint256[] calldata"
                              }
                            },
                            "id": 50957,
                            "indexExpression": {
                              "id": 50956,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 50945,
                              "src": "9688:1:118",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "9680:10:118",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "9665:25:118",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 50959,
                        "nodeType": "ExpressionStatement",
                        "src": "9665:25:118"
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 50950,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 50947,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 50945,
                      "src": "9626:1:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "expression": {
                        "id": 50948,
                        "name": "amounts",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 50910,
                        "src": "9630:7:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                          "typeString": "uint256[] calldata"
                        }
                      },
                      "id": 50949,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "9638:6:118",
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "9630:14:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "9626:18:118",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 50961,
                  "initializationExpression": {
                    "assignments": [
                      50945
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 50945,
                        "mutability": "mutable",
                        "name": "i",
                        "nameLocation": "9623:1:118",
                        "nodeType": "VariableDeclaration",
                        "scope": 50961,
                        "src": "9618:6:118",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 50944,
                          "name": "uint",
                          "nodeType": "ElementaryTypeName",
                          "src": "9618:4:118",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 50946,
                    "nodeType": "VariableDeclarationStatement",
                    "src": "9618:6:118"
                  },
                  "loopExpression": {
                    "expression": {
                      "id": 50952,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "9646:3:118",
                      "subExpression": {
                        "id": 50951,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 50945,
                        "src": "9646:1:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 50953,
                    "nodeType": "ExpressionStatement",
                    "src": "9646:3:118"
                  },
                  "nodeType": "ForStatement",
                  "src": "9613:88:118"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 50965,
                        "name": "totalAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 50942,
                        "src": "9724:11:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 50962,
                        "name": "WETH",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 50366,
                        "src": "9710:4:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IWETH_$47802",
                          "typeString": "contract IWETH"
                        }
                      },
                      "id": 50964,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "9715:8:118",
                      "memberName": "withdraw",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 47781,
                      "src": "9710:13:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_uint256_$returns$__$",
                        "typeString": "function (uint256) external"
                      }
                    },
                    "id": 50966,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9710:26:118",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 50967,
                  "nodeType": "ExpressionStatement",
                  "src": "9710:26:118"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 50969,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "9763:3:118",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 50970,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "9767:6:118",
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "9763:10:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 50971,
                        "name": "totalAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 50942,
                        "src": "9775:11:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 50968,
                      "name": "_safeTransferETH",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 51465,
                      "src": "9746:16:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256)"
                      }
                    },
                    "id": 50972,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9746:41:118",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 50973,
                  "nodeType": "ExpressionStatement",
                  "src": "9746:41:118"
                }
              ]
            },
            "baseFunctions": [
              47887
            ],
            "documentation": {
              "id": 50907,
              "nodeType": "StructuredDocumentation",
              "src": "8373:692:118",
              "text": " @dev batch borrow WETH, unwraps to ETH and send both the ETH and DebtTokens to msg.sender, via `approveDelegation` and onBehalf argument in `LendingPool.borrow`.\n @param amounts the amounts of ETH to borrow\n @param tokenIds The tokenIds of the ERC721 / ERC1155 tokens to be deposited. \n @param tokenValues The numbers of same-value tokens supplied (0 implies ERC721)\n @param reserveIds The ids of the reserves to borrow against. \n @param duration The duration of the loans, 0 if open-ended\n @param onBehalfOf The address to receive the loans.\n @param referralCode integrators are assigned a referral code and can potentially receive rewards"
            },
            "functionSelector": "d0fee568",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "batchBorrowETH",
            "nameLocation": "9079:14:118",
            "overrides": {
              "id": 50927,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "9344:8:118"
            },
            "parameters": {
              "id": 50926,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 50910,
                  "mutability": "mutable",
                  "name": "amounts",
                  "nameLocation": "9122:7:118",
                  "nodeType": "VariableDeclaration",
                  "scope": 50975,
                  "src": "9103:26:118",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 50908,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "9103:7:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 50909,
                    "nodeType": "ArrayTypeName",
                    "src": "9103:9:118",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 50913,
                  "mutability": "mutable",
                  "name": "tokenIds",
                  "nameLocation": "9158:8:118",
                  "nodeType": "VariableDeclaration",
                  "scope": 50975,
                  "src": "9139:27:118",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 50911,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "9139:7:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 50912,
                    "nodeType": "ArrayTypeName",
                    "src": "9139:9:118",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 50916,
                  "mutability": "mutable",
                  "name": "tokenValues",
                  "nameLocation": "9195:11:118",
                  "nodeType": "VariableDeclaration",
                  "scope": 50975,
                  "src": "9176:30:118",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 50914,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "9176:7:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 50915,
                    "nodeType": "ArrayTypeName",
                    "src": "9176:9:118",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 50919,
                  "mutability": "mutable",
                  "name": "reserveIds",
                  "nameLocation": "9235:10:118",
                  "nodeType": "VariableDeclaration",
                  "scope": 50975,
                  "src": "9216:29:118",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 50917,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "9216:7:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 50918,
                    "nodeType": "ArrayTypeName",
                    "src": "9216:9:118",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 50921,
                  "mutability": "mutable",
                  "name": "duration",
                  "nameLocation": "9263:8:118",
                  "nodeType": "VariableDeclaration",
                  "scope": 50975,
                  "src": "9255:16:118",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 50920,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9255:7:118",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 50923,
                  "mutability": "mutable",
                  "name": "onBehalfOf",
                  "nameLocation": "9289:10:118",
                  "nodeType": "VariableDeclaration",
                  "scope": 50975,
                  "src": "9281:18:118",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 50922,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "9281:7:118",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 50925,
                  "mutability": "mutable",
                  "name": "referralCode",
                  "nameLocation": "9316:12:118",
                  "nodeType": "VariableDeclaration",
                  "scope": 50975,
                  "src": "9309:19:118",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  },
                  "typeName": {
                    "id": 50924,
                    "name": "uint16",
                    "nodeType": "ElementaryTypeName",
                    "src": "9309:6:118",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "9093:241:118"
            },
            "returnParameters": {
              "id": 50928,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "9353:0:118"
            },
            "scope": 51570,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 51022,
            "nodeType": "FunctionDefinition",
            "src": "10090:407:118",
            "nodes": [],
            "body": {
              "id": 51021,
              "nodeType": "Block",
              "src": "10190:307:118",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 50988,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "expression": {
                            "id": 50985,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "10208:3:118",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 50986,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "10212:5:118",
                          "memberName": "value",
                          "nodeType": "MemberAccess",
                          "src": "10208:9:118",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "id": 50987,
                          "name": "amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 50980,
                          "src": "10221:6:118",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "10208:19:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "expression": {
                          "id": 50989,
                          "name": "Errors",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 56900,
                          "src": "10229:6:118",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_Errors_$56900_$",
                            "typeString": "type(library Errors)"
                          }
                        },
                        "id": 50990,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberLocation": "10236:43:118",
                        "memberName": "WG_MESSAGE_VALUE_LESS_THAN_REPAYMENT_AMOUNT",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 56890,
                        "src": "10229:50:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 50984,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "10200:7:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 50991,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10200:80:118",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 50992,
                  "nodeType": "ExpressionStatement",
                  "src": "10200:80:118"
                },
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": [],
                        "expression": {
                          "id": 50993,
                          "name": "WETH",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 50366,
                          "src": "10290:4:118",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IWETH_$47802",
                            "typeString": "contract IWETH"
                          }
                        },
                        "id": 50995,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "10295:7:118",
                        "memberName": "deposit",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 47776,
                        "src": "10290:12:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_payable$__$returns$__$",
                          "typeString": "function () payable external"
                        }
                      },
                      "id": 50997,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "names": [
                        "value"
                      ],
                      "nodeType": "FunctionCallOptions",
                      "options": [
                        {
                          "id": 50996,
                          "name": "amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 50980,
                          "src": "10310:6:118",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "src": "10290:27:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_payable$__$returns$__$value",
                        "typeString": "function () payable external"
                      }
                    },
                    "id": 50998,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10290:29:118",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 50999,
                  "nodeType": "ExpressionStatement",
                  "src": "10290:29:118"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 51003,
                        "name": "borrowId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 50978,
                        "src": "10353:8:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 51004,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 50980,
                        "src": "10363:6:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 51000,
                          "name": "_getLendingPool",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 51528,
                          "src": "10329:15:118",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_ILendingPool_$47057_$",
                            "typeString": "function () view returns (contract ILendingPool)"
                          }
                        },
                        "id": 51001,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "10329:17:118",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ILendingPool_$47057",
                          "typeString": "contract ILendingPool"
                        }
                      },
                      "id": 51002,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "10347:5:118",
                      "memberName": "repay",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 46802,
                      "src": "10329:23:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (uint256,uint256) external"
                      }
                    },
                    "id": 51005,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10329:41:118",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 51006,
                  "nodeType": "ExpressionStatement",
                  "src": "10329:41:118"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 51010,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 51007,
                        "name": "msg",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -15,
                        "src": "10422:3:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_message",
                          "typeString": "msg"
                        }
                      },
                      "id": 51008,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "10426:5:118",
                      "memberName": "value",
                      "nodeType": "MemberAccess",
                      "src": "10422:9:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "id": 51009,
                      "name": "amount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 50980,
                      "src": "10434:6:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "10422:18:118",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 51020,
                  "nodeType": "IfStatement",
                  "src": "10418:72:118",
                  "trueBody": {
                    "expression": {
                      "arguments": [
                        {
                          "expression": {
                            "id": 51012,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "10459:3:118",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 51013,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "10463:6:118",
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "src": "10459:10:118",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 51017,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "id": 51014,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -15,
                              "src": "10471:3:118",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 51015,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "10475:5:118",
                            "memberName": "value",
                            "nodeType": "MemberAccess",
                            "src": "10471:9:118",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "-",
                          "rightExpression": {
                            "id": 51016,
                            "name": "amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 50980,
                            "src": "10483:6:118",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "10471:18:118",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 51011,
                        "name": "_safeTransferETH",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51465,
                        "src": "10442:16:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                          "typeString": "function (address,uint256)"
                        }
                      },
                      "id": 51018,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "10442:48:118",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 51019,
                    "nodeType": "ExpressionStatement",
                    "src": "10442:48:118"
                  }
                }
              ]
            },
            "baseFunctions": [
              47894
            ],
            "documentation": {
              "id": 50976,
              "nodeType": "StructuredDocumentation",
              "src": "9800:285:118",
              "text": " @dev repays a borrow on the WETH reserve, for the specified amount (or for the whole amount, if uint256(-1) is specified).\n @param borrowId the id of the borrow to repay\n @param amount the amount to repay, or uint256(-1) if the user wants to repay everything"
            },
            "functionSelector": "7f185c1e",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "repayETH",
            "nameLocation": "10099:8:118",
            "overrides": {
              "id": 50982,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "10181:8:118"
            },
            "parameters": {
              "id": 50981,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 50978,
                  "mutability": "mutable",
                  "name": "borrowId",
                  "nameLocation": "10125:8:118",
                  "nodeType": "VariableDeclaration",
                  "scope": 51022,
                  "src": "10117:16:118",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 50977,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "10117:7:118",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 50980,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "10151:6:118",
                  "nodeType": "VariableDeclaration",
                  "scope": 51022,
                  "src": "10143:14:118",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 50979,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "10143:7:118",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "10107:56:118"
            },
            "returnParameters": {
              "id": 50983,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "10190:0:118"
            },
            "scope": 51570,
            "stateMutability": "payable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 51101,
            "nodeType": "FunctionDefinition",
            "src": "10804:647:118",
            "nodes": [],
            "body": {
              "id": 51100,
              "nodeType": "Block",
              "src": "10933:518:118",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 51038,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "expression": {
                            "id": 51034,
                            "name": "borrowIds",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 51026,
                            "src": "10951:9:118",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                              "typeString": "uint256[] calldata"
                            }
                          },
                          "id": 51035,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "10961:6:118",
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "src": "10951:16:118",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "expression": {
                            "id": 51036,
                            "name": "amounts",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 51029,
                            "src": "10971:7:118",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                              "typeString": "uint256[] calldata"
                            }
                          },
                          "id": 51037,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "10979:6:118",
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "src": "10971:14:118",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "10951:34:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "65",
                        "id": 51039,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "10987:3:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_a8982c89d80987fb9a510e25981ee9170206be21af3c8e0eb312ef1d3382e761",
                          "typeString": "literal_string \"e\""
                        },
                        "value": "e"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_a8982c89d80987fb9a510e25981ee9170206be21af3c8e0eb312ef1d3382e761",
                          "typeString": "literal_string \"e\""
                        }
                      ],
                      "id": 51033,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "10943:7:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 51040,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10943:48:118",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 51041,
                  "nodeType": "ExpressionStatement",
                  "src": "10943:48:118"
                },
                {
                  "assignments": [
                    51043
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 51043,
                      "mutability": "mutable",
                      "name": "totalAmount",
                      "nameLocation": "11010:11:118",
                      "nodeType": "VariableDeclaration",
                      "scope": 51100,
                      "src": "11002:19:118",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 51042,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "11002:7:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 51044,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "11002:19:118"
                },
                {
                  "body": {
                    "id": 51061,
                    "nodeType": "Block",
                    "src": "11069:49:118",
                    "statements": [
                      {
                        "expression": {
                          "id": 51059,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 51055,
                            "name": "totalAmount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 51043,
                            "src": "11083:11:118",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "baseExpression": {
                              "id": 51056,
                              "name": "amounts",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 51029,
                              "src": "11097:7:118",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                                "typeString": "uint256[] calldata"
                              }
                            },
                            "id": 51058,
                            "indexExpression": {
                              "id": 51057,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 51046,
                              "src": "11105:1:118",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "11097:10:118",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "11083:24:118",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 51060,
                        "nodeType": "ExpressionStatement",
                        "src": "11083:24:118"
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 51051,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 51048,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 51046,
                      "src": "11044:1:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "expression": {
                        "id": 51049,
                        "name": "amounts",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51029,
                        "src": "11048:7:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                          "typeString": "uint256[] calldata"
                        }
                      },
                      "id": 51050,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "11056:6:118",
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "11048:14:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "11044:18:118",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 51062,
                  "initializationExpression": {
                    "assignments": [
                      51046
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 51046,
                        "mutability": "mutable",
                        "name": "i",
                        "nameLocation": "11041:1:118",
                        "nodeType": "VariableDeclaration",
                        "scope": 51062,
                        "src": "11036:6:118",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 51045,
                          "name": "uint",
                          "nodeType": "ElementaryTypeName",
                          "src": "11036:4:118",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 51047,
                    "nodeType": "VariableDeclarationStatement",
                    "src": "11036:6:118"
                  },
                  "loopExpression": {
                    "expression": {
                      "id": 51053,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "11064:3:118",
                      "subExpression": {
                        "id": 51052,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51046,
                        "src": "11064:1:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 51054,
                    "nodeType": "ExpressionStatement",
                    "src": "11064:3:118"
                  },
                  "nodeType": "ForStatement",
                  "src": "11031:87:118"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 51067,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "expression": {
                            "id": 51064,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "11135:3:118",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 51065,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "11139:5:118",
                          "memberName": "value",
                          "nodeType": "MemberAccess",
                          "src": "11135:9:118",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "id": 51066,
                          "name": "totalAmount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 51043,
                          "src": "11148:11:118",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "11135:24:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "expression": {
                          "id": 51068,
                          "name": "Errors",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 56900,
                          "src": "11161:6:118",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_Errors_$56900_$",
                            "typeString": "type(library Errors)"
                          }
                        },
                        "id": 51069,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberLocation": "11168:43:118",
                        "memberName": "WG_MESSAGE_VALUE_LESS_THAN_REPAYMENT_AMOUNT",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 56890,
                        "src": "11161:50:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 51063,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "11127:7:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 51070,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11127:85:118",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 51071,
                  "nodeType": "ExpressionStatement",
                  "src": "11127:85:118"
                },
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": [],
                        "expression": {
                          "id": 51072,
                          "name": "WETH",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 50366,
                          "src": "11222:4:118",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IWETH_$47802",
                            "typeString": "contract IWETH"
                          }
                        },
                        "id": 51074,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "11227:7:118",
                        "memberName": "deposit",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 47776,
                        "src": "11222:12:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_payable$__$returns$__$",
                          "typeString": "function () payable external"
                        }
                      },
                      "id": 51076,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "names": [
                        "value"
                      ],
                      "nodeType": "FunctionCallOptions",
                      "options": [
                        {
                          "id": 51075,
                          "name": "totalAmount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 51043,
                          "src": "11242:11:118",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "src": "11222:32:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_payable$__$returns$__$value",
                        "typeString": "function () payable external"
                      }
                    },
                    "id": 51077,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11222:34:118",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 51078,
                  "nodeType": "ExpressionStatement",
                  "src": "11222:34:118"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 51082,
                        "name": "borrowIds",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51026,
                        "src": "11295:9:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                          "typeString": "uint256[] calldata"
                        }
                      },
                      {
                        "id": 51083,
                        "name": "amounts",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51029,
                        "src": "11306:7:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                          "typeString": "uint256[] calldata"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                          "typeString": "uint256[] calldata"
                        },
                        {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                          "typeString": "uint256[] calldata"
                        }
                      ],
                      "expression": {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 51079,
                          "name": "_getLendingPool",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 51528,
                          "src": "11266:15:118",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_ILendingPool_$47057_$",
                            "typeString": "function () view returns (contract ILendingPool)"
                          }
                        },
                        "id": 51080,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "11266:17:118",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ILendingPool_$47057",
                          "typeString": "contract ILendingPool"
                        }
                      },
                      "id": 51081,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "11284:10:118",
                      "memberName": "batchRepay",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 46811,
                      "src": "11266:28:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$__$",
                        "typeString": "function (uint256[] memory,uint256[] memory) external"
                      }
                    },
                    "id": 51084,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11266:48:118",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 51085,
                  "nodeType": "ExpressionStatement",
                  "src": "11266:48:118"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 51089,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 51086,
                        "name": "msg",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -15,
                        "src": "11366:3:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_message",
                          "typeString": "msg"
                        }
                      },
                      "id": 51087,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "11370:5:118",
                      "memberName": "value",
                      "nodeType": "MemberAccess",
                      "src": "11366:9:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "id": 51088,
                      "name": "totalAmount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 51043,
                      "src": "11378:11:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "11366:23:118",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 51099,
                  "nodeType": "IfStatement",
                  "src": "11362:82:118",
                  "trueBody": {
                    "expression": {
                      "arguments": [
                        {
                          "expression": {
                            "id": 51091,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "11408:3:118",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 51092,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "11412:6:118",
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "src": "11408:10:118",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 51096,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "id": 51093,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -15,
                              "src": "11420:3:118",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 51094,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "11424:5:118",
                            "memberName": "value",
                            "nodeType": "MemberAccess",
                            "src": "11420:9:118",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "-",
                          "rightExpression": {
                            "id": 51095,
                            "name": "totalAmount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 51043,
                            "src": "11432:11:118",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "11420:23:118",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 51090,
                        "name": "_safeTransferETH",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51465,
                        "src": "11391:16:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                          "typeString": "function (address,uint256)"
                        }
                      },
                      "id": 51097,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "11391:53:118",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 51098,
                    "nodeType": "ExpressionStatement",
                    "src": "11391:53:118"
                  }
                }
              ]
            },
            "baseFunctions": [
              47903
            ],
            "documentation": {
              "id": 51023,
              "nodeType": "StructuredDocumentation",
              "src": "10503:296:118",
              "text": " @dev batch repays a borrow on the WETH reserve, for the specified amount (or for the whole amount, if uint256(-1) is specified).\n @param borrowIds the ids of the borrows to repay\n @param amounts the amounts to repay, or uint256(-1) if the user wants to repay everything"
            },
            "functionSelector": "5a953999",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "batchRepayETH",
            "nameLocation": "10813:13:118",
            "overrides": {
              "id": 51031,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "10924:8:118"
            },
            "parameters": {
              "id": 51030,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 51026,
                  "mutability": "mutable",
                  "name": "borrowIds",
                  "nameLocation": "10855:9:118",
                  "nodeType": "VariableDeclaration",
                  "scope": 51101,
                  "src": "10836:28:118",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 51024,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "10836:7:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 51025,
                    "nodeType": "ArrayTypeName",
                    "src": "10836:9:118",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 51029,
                  "mutability": "mutable",
                  "name": "amounts",
                  "nameLocation": "10893:7:118",
                  "nodeType": "VariableDeclaration",
                  "scope": 51101,
                  "src": "10874:26:118",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 51027,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "10874:7:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 51028,
                    "nodeType": "ArrayTypeName",
                    "src": "10874:9:118",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "10826:80:118"
            },
            "returnParameters": {
              "id": 51032,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "10933:0:118"
            },
            "scope": 51570,
            "stateMutability": "payable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 51173,
            "nodeType": "FunctionDefinition",
            "src": "11795:721:118",
            "nodes": [],
            "body": {
              "id": 51172,
              "nodeType": "Block",
              "src": "11925:591:118",
              "nodes": [],
              "statements": [
                {
                  "assignments": [
                    51113
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 51113,
                      "mutability": "mutable",
                      "name": "repaymentAmount",
                      "nameLocation": "11943:15:118",
                      "nodeType": "VariableDeclaration",
                      "scope": 51172,
                      "src": "11935:23:118",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 51112,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "11935:7:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 51114,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "11935:23:118"
                },
                {
                  "assignments": [
                    null,
                    null,
                    null,
                    51116
                  ],
                  "declarations": [
                    null,
                    null,
                    null,
                    {
                      "constant": false,
                      "id": 51116,
                      "mutability": "mutable",
                      "name": "borrowAmount",
                      "nameLocation": "11981:12:118",
                      "nodeType": "VariableDeclaration",
                      "scope": 51172,
                      "src": "11973:20:118",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 51115,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "11973:7:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 51122,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 51120,
                        "name": "borrowId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51104,
                        "src": "12037:8:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 51117,
                          "name": "_getCollateralManager",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 51542,
                          "src": "11997:21:118",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_ICollateralManager_$45758_$",
                            "typeString": "function () view returns (contract ICollateralManager)"
                          }
                        },
                        "id": 51118,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "11997:23:118",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ICollateralManager_$45758",
                          "typeString": "contract ICollateralManager"
                        }
                      },
                      "id": 51119,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "12021:15:118",
                      "memberName": "getBorrowAmount",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 45698,
                      "src": "11997:39:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_uint256_$returns$_t_address_$_t_uint256_$_t_address_$_t_uint256_$",
                        "typeString": "function (uint256) view external returns (address,uint256,address,uint256)"
                      }
                    },
                    "id": 51121,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11997:49:118",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_address_$_t_uint256_$_t_address_$_t_uint256_$",
                      "typeString": "tuple(address,uint256,address,uint256)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "11969:77:118"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 51125,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 51123,
                      "name": "amount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 51106,
                      "src": "12060:6:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "id": 51124,
                      "name": "borrowAmount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 51116,
                      "src": "12069:12:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "12060:21:118",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 51142,
                  "nodeType": "IfStatement",
                  "src": "12056:194:118",
                  "trueBody": {
                    "id": 51141,
                    "nodeType": "Block",
                    "src": "12083:167:118",
                    "statements": [
                      {
                        "expression": {
                          "id": 51130,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 51126,
                            "name": "repaymentAmount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 51113,
                            "src": "12097:15:118",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 51129,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 51127,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 51106,
                              "src": "12115:6:118",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "-",
                            "rightExpression": {
                              "id": 51128,
                              "name": "borrowAmount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 51116,
                              "src": "12124:12:118",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "12115:21:118",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "12097:39:118",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 51131,
                        "nodeType": "ExpressionStatement",
                        "src": "12097:39:118"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 51136,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "expression": {
                                  "id": 51133,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -15,
                                  "src": "12158:3:118",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 51134,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberLocation": "12162:5:118",
                                "memberName": "value",
                                "nodeType": "MemberAccess",
                                "src": "12158:9:118",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">=",
                              "rightExpression": {
                                "id": 51135,
                                "name": "repaymentAmount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 51113,
                                "src": "12171:15:118",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "12158:28:118",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "expression": {
                                "id": 51137,
                                "name": "Errors",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 56900,
                                "src": "12188:6:118",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_Errors_$56900_$",
                                  "typeString": "type(library Errors)"
                                }
                              },
                              "id": 51138,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberLocation": "12195:43:118",
                              "memberName": "WG_MESSAGE_VALUE_LESS_THAN_REPAYMENT_AMOUNT",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 56890,
                              "src": "12188:50:118",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            ],
                            "id": 51132,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "12150:7:118",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 51139,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "12150:89:118",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 51140,
                        "nodeType": "ExpressionStatement",
                        "src": "12150:89:118"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": [],
                        "expression": {
                          "id": 51143,
                          "name": "WETH",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 50366,
                          "src": "12268:4:118",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IWETH_$47802",
                            "typeString": "contract IWETH"
                          }
                        },
                        "id": 51145,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "12273:7:118",
                        "memberName": "deposit",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 47776,
                        "src": "12268:12:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_payable$__$returns$__$",
                          "typeString": "function () payable external"
                        }
                      },
                      "id": 51147,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "names": [
                        "value"
                      ],
                      "nodeType": "FunctionCallOptions",
                      "options": [
                        {
                          "id": 51146,
                          "name": "repaymentAmount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 51113,
                          "src": "12288:15:118",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "src": "12268:36:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_payable$__$returns$__$value",
                        "typeString": "function () payable external"
                      }
                    },
                    "id": 51148,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12268:38:118",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 51149,
                  "nodeType": "ExpressionStatement",
                  "src": "12268:38:118"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 51153,
                        "name": "borrowId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51104,
                        "src": "12344:8:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 51154,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51106,
                        "src": "12354:6:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 51155,
                        "name": "duration",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51108,
                        "src": "12362:8:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 51150,
                          "name": "_getLendingPool",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 51528,
                          "src": "12316:15:118",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_ILendingPool_$47057_$",
                            "typeString": "function () view returns (contract ILendingPool)"
                          }
                        },
                        "id": 51151,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "12316:17:118",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ILendingPool_$47057",
                          "typeString": "contract ILendingPool"
                        }
                      },
                      "id": 51152,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "12334:9:118",
                      "memberName": "refinance",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 46820,
                      "src": "12316:27:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (uint256,uint256,uint256) external"
                      }
                    },
                    "id": 51156,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12316:55:118",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 51157,
                  "nodeType": "ExpressionStatement",
                  "src": "12316:55:118"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 51161,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 51158,
                        "name": "msg",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -15,
                        "src": "12423:3:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_message",
                          "typeString": "msg"
                        }
                      },
                      "id": 51159,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "12427:5:118",
                      "memberName": "value",
                      "nodeType": "MemberAccess",
                      "src": "12423:9:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "id": 51160,
                      "name": "repaymentAmount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 51113,
                      "src": "12435:15:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "12423:27:118",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 51171,
                  "nodeType": "IfStatement",
                  "src": "12419:90:118",
                  "trueBody": {
                    "expression": {
                      "arguments": [
                        {
                          "expression": {
                            "id": 51163,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "12469:3:118",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 51164,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "12473:6:118",
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "src": "12469:10:118",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 51168,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "id": 51165,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -15,
                              "src": "12481:3:118",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 51166,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "12485:5:118",
                            "memberName": "value",
                            "nodeType": "MemberAccess",
                            "src": "12481:9:118",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "-",
                          "rightExpression": {
                            "id": 51167,
                            "name": "repaymentAmount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 51113,
                            "src": "12493:15:118",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "12481:27:118",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 51162,
                        "name": "_safeTransferETH",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51465,
                        "src": "12452:16:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                          "typeString": "function (address,uint256)"
                        }
                      },
                      "id": 51169,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "12452:57:118",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 51170,
                    "nodeType": "ExpressionStatement",
                    "src": "12452:57:118"
                  }
                }
              ]
            },
            "baseFunctions": [
              47912
            ],
            "documentation": {
              "id": 51102,
              "nodeType": "StructuredDocumentation",
              "src": "11457:333:118",
              "text": " @dev refinances a borrow on the WETH reserve, for the specified amount (or for the whole amount, if uint256(-1) is specified).\n @param borrowId the id of loan to be refinanced\n @param amount the borrow amount of the refinanced loan\n @param duration The duration of the refinanced loan, 0 if open-ended"
            },
            "functionSelector": "0572c30f",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "refinanceETH",
            "nameLocation": "11804:12:118",
            "overrides": {
              "id": 51110,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "11916:8:118"
            },
            "parameters": {
              "id": 51109,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 51104,
                  "mutability": "mutable",
                  "name": "borrowId",
                  "nameLocation": "11834:8:118",
                  "nodeType": "VariableDeclaration",
                  "scope": 51173,
                  "src": "11826:16:118",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 51103,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "11826:7:118",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 51106,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "11860:6:118",
                  "nodeType": "VariableDeclaration",
                  "scope": 51173,
                  "src": "11852:14:118",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 51105,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "11852:7:118",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 51108,
                  "mutability": "mutable",
                  "name": "duration",
                  "nameLocation": "11884:8:118",
                  "nodeType": "VariableDeclaration",
                  "scope": 51173,
                  "src": "11876:16:118",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 51107,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "11876:7:118",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "11816:82:118"
            },
            "returnParameters": {
              "id": 51111,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "11925:0:118"
            },
            "scope": 51570,
            "stateMutability": "payable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 51289,
            "nodeType": "FunctionDefinition",
            "src": "12878:1000:118",
            "nodes": [],
            "body": {
              "id": 51288,
              "nodeType": "Block",
              "src": "13049:829:118",
              "nodes": [],
              "statements": [
                {
                  "assignments": [
                    51188
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 51188,
                      "mutability": "mutable",
                      "name": "borrowAmount",
                      "nameLocation": "13067:12:118",
                      "nodeType": "VariableDeclaration",
                      "scope": 51288,
                      "src": "13059:20:118",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 51187,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "13059:7:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 51189,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "13059:20:118"
                },
                {
                  "assignments": [
                    51191
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 51191,
                      "mutability": "mutable",
                      "name": "repaymentAmount",
                      "nameLocation": "13097:15:118",
                      "nodeType": "VariableDeclaration",
                      "scope": 51288,
                      "src": "13089:23:118",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 51190,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "13089:7:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 51192,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "13089:23:118"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 51198,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "expression": {
                            "id": 51194,
                            "name": "borrowIds",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 51177,
                            "src": "13131:9:118",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                              "typeString": "uint256[] calldata"
                            }
                          },
                          "id": 51195,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "13141:6:118",
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "src": "13131:16:118",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "expression": {
                            "id": 51196,
                            "name": "amounts",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 51180,
                            "src": "13151:7:118",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                              "typeString": "uint256[] calldata"
                            }
                          },
                          "id": 51197,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "13159:6:118",
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "src": "13151:14:118",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "13131:34:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "65",
                        "id": 51199,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "13167:3:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_a8982c89d80987fb9a510e25981ee9170206be21af3c8e0eb312ef1d3382e761",
                          "typeString": "literal_string \"e\""
                        },
                        "value": "e"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_a8982c89d80987fb9a510e25981ee9170206be21af3c8e0eb312ef1d3382e761",
                          "typeString": "literal_string \"e\""
                        }
                      ],
                      "id": 51193,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "13123:7:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 51200,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13123:48:118",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 51201,
                  "nodeType": "ExpressionStatement",
                  "src": "13123:48:118"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 51207,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "expression": {
                            "id": 51203,
                            "name": "borrowIds",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 51177,
                            "src": "13189:9:118",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                              "typeString": "uint256[] calldata"
                            }
                          },
                          "id": 51204,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "13199:6:118",
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "src": "13189:16:118",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "expression": {
                            "id": 51205,
                            "name": "durations",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 51183,
                            "src": "13209:9:118",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                              "typeString": "uint256[] calldata"
                            }
                          },
                          "id": 51206,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "13219:6:118",
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "src": "13209:16:118",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "13189:36:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "65",
                        "id": 51208,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "13227:3:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_a8982c89d80987fb9a510e25981ee9170206be21af3c8e0eb312ef1d3382e761",
                          "typeString": "literal_string \"e\""
                        },
                        "value": "e"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_a8982c89d80987fb9a510e25981ee9170206be21af3c8e0eb312ef1d3382e761",
                          "typeString": "literal_string \"e\""
                        }
                      ],
                      "id": 51202,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "13181:7:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 51209,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13181:50:118",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 51210,
                  "nodeType": "ExpressionStatement",
                  "src": "13181:50:118"
                },
                {
                  "body": {
                    "id": 51248,
                    "nodeType": "Block",
                    "src": "13286:219:118",
                    "statements": [
                      {
                        "expression": {
                          "id": 51231,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "components": [
                              null,
                              null,
                              null,
                              {
                                "id": 51222,
                                "name": "borrowAmount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 51188,
                                "src": "13304:12:118",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "id": 51223,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "TupleExpression",
                            "src": "13300:17:118",
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$__$__$_t_uint256_$",
                              "typeString": "tuple(,,,uint256)"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "baseExpression": {
                                  "id": 51227,
                                  "name": "borrowIds",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 51177,
                                  "src": "13360:9:118",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                                    "typeString": "uint256[] calldata"
                                  }
                                },
                                "id": 51229,
                                "indexExpression": {
                                  "id": 51228,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 51212,
                                  "src": "13370:1:118",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "13360:12:118",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "id": 51224,
                                  "name": "_getCollateralManager",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 51542,
                                  "src": "13320:21:118",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_ICollateralManager_$45758_$",
                                    "typeString": "function () view returns (contract ICollateralManager)"
                                  }
                                },
                                "id": 51225,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "13320:23:118",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_ICollateralManager_$45758",
                                  "typeString": "contract ICollateralManager"
                                }
                              },
                              "id": 51226,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "13344:15:118",
                              "memberName": "getBorrowAmount",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 45698,
                              "src": "13320:39:118",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_view$_t_uint256_$returns$_t_address_$_t_uint256_$_t_address_$_t_uint256_$",
                                "typeString": "function (uint256) view external returns (address,uint256,address,uint256)"
                              }
                            },
                            "id": 51230,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "13320:53:118",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$_t_address_$_t_uint256_$_t_address_$_t_uint256_$",
                              "typeString": "tuple(address,uint256,address,uint256)"
                            }
                          },
                          "src": "13300:73:118",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 51232,
                        "nodeType": "ExpressionStatement",
                        "src": "13300:73:118"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 51237,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "baseExpression": {
                              "id": 51233,
                              "name": "amounts",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 51180,
                              "src": "13391:7:118",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                                "typeString": "uint256[] calldata"
                              }
                            },
                            "id": 51235,
                            "indexExpression": {
                              "id": 51234,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 51212,
                              "src": "13399:1:118",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "13391:10:118",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "id": 51236,
                            "name": "borrowAmount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 51188,
                            "src": "13404:12:118",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "13391:25:118",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 51247,
                        "nodeType": "IfStatement",
                        "src": "13387:108:118",
                        "trueBody": {
                          "id": 51246,
                          "nodeType": "Block",
                          "src": "13418:77:118",
                          "statements": [
                            {
                              "expression": {
                                "id": 51244,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 51238,
                                  "name": "repaymentAmount",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 51191,
                                  "src": "13436:15:118",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "+=",
                                "rightHandSide": {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 51243,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "baseExpression": {
                                      "id": 51239,
                                      "name": "amounts",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 51180,
                                      "src": "13455:7:118",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                                        "typeString": "uint256[] calldata"
                                      }
                                    },
                                    "id": 51241,
                                    "indexExpression": {
                                      "id": 51240,
                                      "name": "i",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 51212,
                                      "src": "13463:1:118",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "13455:10:118",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "-",
                                  "rightExpression": {
                                    "id": 51242,
                                    "name": "borrowAmount",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 51188,
                                    "src": "13468:12:118",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "13455:25:118",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "13436:44:118",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 51245,
                              "nodeType": "ExpressionStatement",
                              "src": "13436:44:118"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 51218,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 51215,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 51212,
                      "src": "13259:1:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "expression": {
                        "id": 51216,
                        "name": "borrowIds",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51177,
                        "src": "13263:9:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                          "typeString": "uint256[] calldata"
                        }
                      },
                      "id": 51217,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "13273:6:118",
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "13263:16:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "13259:20:118",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 51249,
                  "initializationExpression": {
                    "assignments": [
                      51212
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 51212,
                        "mutability": "mutable",
                        "name": "i",
                        "nameLocation": "13252:1:118",
                        "nodeType": "VariableDeclaration",
                        "scope": 51249,
                        "src": "13247:6:118",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 51211,
                          "name": "uint",
                          "nodeType": "ElementaryTypeName",
                          "src": "13247:4:118",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 51214,
                    "initialValue": {
                      "hexValue": "30",
                      "id": 51213,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "13256:1:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "13247:10:118"
                  },
                  "loopExpression": {
                    "expression": {
                      "id": 51220,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "13281:3:118",
                      "subExpression": {
                        "id": 51219,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51212,
                        "src": "13281:1:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 51221,
                    "nodeType": "ExpressionStatement",
                    "src": "13281:3:118"
                  },
                  "nodeType": "ForStatement",
                  "src": "13242:263:118"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 51254,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "expression": {
                            "id": 51251,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "13522:3:118",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 51252,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "13526:5:118",
                          "memberName": "value",
                          "nodeType": "MemberAccess",
                          "src": "13522:9:118",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "id": 51253,
                          "name": "repaymentAmount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 51191,
                          "src": "13535:15:118",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "13522:28:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "expression": {
                          "id": 51255,
                          "name": "Errors",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 56900,
                          "src": "13552:6:118",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_Errors_$56900_$",
                            "typeString": "type(library Errors)"
                          }
                        },
                        "id": 51256,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberLocation": "13559:43:118",
                        "memberName": "WG_MESSAGE_VALUE_LESS_THAN_REPAYMENT_AMOUNT",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 56890,
                        "src": "13552:50:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 51250,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "13514:7:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 51257,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13514:89:118",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 51258,
                  "nodeType": "ExpressionStatement",
                  "src": "13514:89:118"
                },
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": [],
                        "expression": {
                          "id": 51259,
                          "name": "WETH",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 50366,
                          "src": "13622:4:118",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IWETH_$47802",
                            "typeString": "contract IWETH"
                          }
                        },
                        "id": 51261,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "13627:7:118",
                        "memberName": "deposit",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 47776,
                        "src": "13622:12:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_payable$__$returns$__$",
                          "typeString": "function () payable external"
                        }
                      },
                      "id": 51263,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "names": [
                        "value"
                      ],
                      "nodeType": "FunctionCallOptions",
                      "options": [
                        {
                          "id": 51262,
                          "name": "repaymentAmount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 51191,
                          "src": "13642:15:118",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "src": "13622:36:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_payable$__$returns$__$value",
                        "typeString": "function () payable external"
                      }
                    },
                    "id": 51264,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13622:38:118",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 51265,
                  "nodeType": "ExpressionStatement",
                  "src": "13622:38:118"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 51269,
                        "name": "borrowIds",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51177,
                        "src": "13703:9:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                          "typeString": "uint256[] calldata"
                        }
                      },
                      {
                        "id": 51270,
                        "name": "amounts",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51180,
                        "src": "13714:7:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                          "typeString": "uint256[] calldata"
                        }
                      },
                      {
                        "id": 51271,
                        "name": "durations",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51183,
                        "src": "13723:9:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                          "typeString": "uint256[] calldata"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                          "typeString": "uint256[] calldata"
                        },
                        {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                          "typeString": "uint256[] calldata"
                        },
                        {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                          "typeString": "uint256[] calldata"
                        }
                      ],
                      "expression": {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 51266,
                          "name": "_getLendingPool",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 51528,
                          "src": "13670:15:118",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_ILendingPool_$47057_$",
                            "typeString": "function () view returns (contract ILendingPool)"
                          }
                        },
                        "id": 51267,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "13670:17:118",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ILendingPool_$47057",
                          "typeString": "contract ILendingPool"
                        }
                      },
                      "id": 51268,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "13688:14:118",
                      "memberName": "batchRefinance",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 46832,
                      "src": "13670:32:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$__$",
                        "typeString": "function (uint256[] memory,uint256[] memory,uint256[] memory) external"
                      }
                    },
                    "id": 51272,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13670:63:118",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 51273,
                  "nodeType": "ExpressionStatement",
                  "src": "13670:63:118"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 51277,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 51274,
                        "name": "msg",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -15,
                        "src": "13785:3:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_message",
                          "typeString": "msg"
                        }
                      },
                      "id": 51275,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "13789:5:118",
                      "memberName": "value",
                      "nodeType": "MemberAccess",
                      "src": "13785:9:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "id": 51276,
                      "name": "repaymentAmount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 51191,
                      "src": "13797:15:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "13785:27:118",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 51287,
                  "nodeType": "IfStatement",
                  "src": "13781:90:118",
                  "trueBody": {
                    "expression": {
                      "arguments": [
                        {
                          "expression": {
                            "id": 51279,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "13831:3:118",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 51280,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "13835:6:118",
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "src": "13831:10:118",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 51284,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "id": 51281,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -15,
                              "src": "13843:3:118",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 51282,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "13847:5:118",
                            "memberName": "value",
                            "nodeType": "MemberAccess",
                            "src": "13843:9:118",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "-",
                          "rightExpression": {
                            "id": 51283,
                            "name": "repaymentAmount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 51191,
                            "src": "13855:15:118",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "13843:27:118",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 51278,
                        "name": "_safeTransferETH",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51465,
                        "src": "13814:16:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                          "typeString": "function (address,uint256)"
                        }
                      },
                      "id": 51285,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "13814:57:118",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 51286,
                    "nodeType": "ExpressionStatement",
                    "src": "13814:57:118"
                  }
                }
              ]
            },
            "baseFunctions": [
              47924
            ],
            "documentation": {
              "id": 51174,
              "nodeType": "StructuredDocumentation",
              "src": "12522:351:118",
              "text": " @dev batch refinances borrows on the WETH reserve, for the specified amount (or for the whole amount, if uint256(-1) is specified).\n @param borrowIds the ids of the loans to be refinanced\n @param amounts the borrow amounts of the refinanced loans\n @param durations The durations of the refinanced loans, 0 if open-ended"
            },
            "functionSelector": "bba6bc6d",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "batchRefinanceETH",
            "nameLocation": "12887:17:118",
            "overrides": {
              "id": 51185,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "13040:8:118"
            },
            "parameters": {
              "id": 51184,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 51177,
                  "mutability": "mutable",
                  "name": "borrowIds",
                  "nameLocation": "12933:9:118",
                  "nodeType": "VariableDeclaration",
                  "scope": 51289,
                  "src": "12914:28:118",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 51175,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "12914:7:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 51176,
                    "nodeType": "ArrayTypeName",
                    "src": "12914:9:118",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 51180,
                  "mutability": "mutable",
                  "name": "amounts",
                  "nameLocation": "12971:7:118",
                  "nodeType": "VariableDeclaration",
                  "scope": 51289,
                  "src": "12952:26:118",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 51178,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "12952:7:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 51179,
                    "nodeType": "ArrayTypeName",
                    "src": "12952:9:118",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 51183,
                  "mutability": "mutable",
                  "name": "durations",
                  "nameLocation": "13007:9:118",
                  "nodeType": "VariableDeclaration",
                  "scope": 51289,
                  "src": "12988:28:118",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 51181,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "12988:7:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 51182,
                    "nodeType": "ArrayTypeName",
                    "src": "12988:9:118",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "12904:118:118"
            },
            "returnParameters": {
              "id": 51186,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "13049:0:118"
            },
            "scope": 51570,
            "stateMutability": "payable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 51342,
            "nodeType": "FunctionDefinition",
            "src": "14187:471:118",
            "nodes": [],
            "body": {
              "id": 51341,
              "nodeType": "Block",
              "src": "14336:322:118",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 51306,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "expression": {
                            "id": 51303,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "14354:3:118",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 51304,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "14358:5:118",
                          "memberName": "value",
                          "nodeType": "MemberAccess",
                          "src": "14354:9:118",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "id": 51305,
                          "name": "amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 51294,
                          "src": "14367:6:118",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "14354:19:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "expression": {
                          "id": 51307,
                          "name": "Errors",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 56900,
                          "src": "14375:6:118",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_Errors_$56900_$",
                            "typeString": "type(library Errors)"
                          }
                        },
                        "id": 51308,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberLocation": "14382:41:118",
                        "memberName": "WG_MESSAGE_VALUE_LESS_THAN_PAYMENT_AMOUNT",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 56887,
                        "src": "14375:48:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 51302,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "14346:7:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 51309,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14346:78:118",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 51310,
                  "nodeType": "ExpressionStatement",
                  "src": "14346:78:118"
                },
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": [],
                        "expression": {
                          "id": 51311,
                          "name": "WETH",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 50366,
                          "src": "14434:4:118",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IWETH_$47802",
                            "typeString": "contract IWETH"
                          }
                        },
                        "id": 51313,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "14439:7:118",
                        "memberName": "deposit",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 47776,
                        "src": "14434:12:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_payable$__$returns$__$",
                          "typeString": "function () payable external"
                        }
                      },
                      "id": 51315,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "names": [
                        "value"
                      ],
                      "nodeType": "FunctionCallOptions",
                      "options": [
                        {
                          "id": 51314,
                          "name": "amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 51294,
                          "src": "14454:6:118",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "src": "14434:27:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_payable$__$returns$__$value",
                        "typeString": "function () payable external"
                      }
                    },
                    "id": 51316,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14434:29:118",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 51317,
                  "nodeType": "ExpressionStatement",
                  "src": "14434:29:118"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 51321,
                        "name": "asset",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51292,
                        "src": "14495:5:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 51322,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51294,
                        "src": "14502:6:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 51323,
                        "name": "borrowId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51296,
                        "src": "14510:8:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 51324,
                        "name": "onBehalfOf",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51298,
                        "src": "14520:10:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 51318,
                          "name": "_getLendingPool",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 51528,
                          "src": "14473:15:118",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_ILendingPool_$47057_$",
                            "typeString": "function () view returns (contract ILendingPool)"
                          }
                        },
                        "id": 51319,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "14473:17:118",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ILendingPool_$47057",
                          "typeString": "contract ILendingPool"
                        }
                      },
                      "id": 51320,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "14491:3:118",
                      "memberName": "bid",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 46859,
                      "src": "14473:21:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$_t_uint256_$_t_address_$returns$__$",
                        "typeString": "function (address,uint256,uint256,address) external"
                      }
                    },
                    "id": 51325,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14473:58:118",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 51326,
                  "nodeType": "ExpressionStatement",
                  "src": "14473:58:118"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 51330,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 51327,
                        "name": "msg",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -15,
                        "src": "14583:3:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_message",
                          "typeString": "msg"
                        }
                      },
                      "id": 51328,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "14587:5:118",
                      "memberName": "value",
                      "nodeType": "MemberAccess",
                      "src": "14583:9:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "id": 51329,
                      "name": "amount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 51294,
                      "src": "14595:6:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "14583:18:118",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 51340,
                  "nodeType": "IfStatement",
                  "src": "14579:72:118",
                  "trueBody": {
                    "expression": {
                      "arguments": [
                        {
                          "expression": {
                            "id": 51332,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "14620:3:118",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 51333,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "14624:6:118",
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "src": "14620:10:118",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 51337,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "id": 51334,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -15,
                              "src": "14632:3:118",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 51335,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "14636:5:118",
                            "memberName": "value",
                            "nodeType": "MemberAccess",
                            "src": "14632:9:118",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "-",
                          "rightExpression": {
                            "id": 51336,
                            "name": "amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 51294,
                            "src": "14644:6:118",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "14632:18:118",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 51331,
                        "name": "_safeTransferETH",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51465,
                        "src": "14603:16:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                          "typeString": "function (address,uint256)"
                        }
                      },
                      "id": 51338,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "14603:48:118",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 51339,
                    "nodeType": "ExpressionStatement",
                    "src": "14603:48:118"
                  }
                }
              ]
            },
            "baseFunctions": [
              47935
            ],
            "documentation": {
              "id": 51290,
              "nodeType": "StructuredDocumentation",
              "src": "13884:298:118",
              "text": " @dev bid purchases the underlying collatearl of a defaulted borrow.\n @param asset address of the asset contract used for payment\n @param amount the payment amount\n @param borrowId the id of the defaulted borrow\n @param onBehalfOf The address to receive the NFT."
            },
            "functionSelector": "664054ce",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "bidETH",
            "nameLocation": "14196:6:118",
            "overrides": {
              "id": 51300,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "14327:8:118"
            },
            "parameters": {
              "id": 51299,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 51292,
                  "mutability": "mutable",
                  "name": "asset",
                  "nameLocation": "14220:5:118",
                  "nodeType": "VariableDeclaration",
                  "scope": 51342,
                  "src": "14212:13:118",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 51291,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "14212:7:118",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 51294,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "14243:6:118",
                  "nodeType": "VariableDeclaration",
                  "scope": 51342,
                  "src": "14235:14:118",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 51293,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "14235:7:118",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 51296,
                  "mutability": "mutable",
                  "name": "borrowId",
                  "nameLocation": "14267:8:118",
                  "nodeType": "VariableDeclaration",
                  "scope": 51342,
                  "src": "14259:16:118",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 51295,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "14259:7:118",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 51298,
                  "mutability": "mutable",
                  "name": "onBehalfOf",
                  "nameLocation": "14293:10:118",
                  "nodeType": "VariableDeclaration",
                  "scope": 51342,
                  "src": "14285:18:118",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 51297,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "14285:7:118",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "14202:107:118"
            },
            "returnParameters": {
              "id": 51301,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "14336:0:118"
            },
            "scope": 51570,
            "stateMutability": "payable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 51438,
            "nodeType": "FunctionDefinition",
            "src": "14988:792:118",
            "nodes": [],
            "body": {
              "id": 51437,
              "nodeType": "Block",
              "src": "15190:590:118",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 51364,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "expression": {
                            "id": 51360,
                            "name": "assets",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 51346,
                            "src": "15208:6:118",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                              "typeString": "address[] calldata"
                            }
                          },
                          "id": 51361,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "15215:6:118",
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "src": "15208:13:118",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "expression": {
                            "id": 51362,
                            "name": "amounts",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 51349,
                            "src": "15225:7:118",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                              "typeString": "uint256[] calldata"
                            }
                          },
                          "id": 51363,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "15233:6:118",
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "src": "15225:14:118",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "15208:31:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "65",
                        "id": 51365,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "15241:3:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_a8982c89d80987fb9a510e25981ee9170206be21af3c8e0eb312ef1d3382e761",
                          "typeString": "literal_string \"e\""
                        },
                        "value": "e"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_a8982c89d80987fb9a510e25981ee9170206be21af3c8e0eb312ef1d3382e761",
                          "typeString": "literal_string \"e\""
                        }
                      ],
                      "id": 51359,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "15200:7:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 51366,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15200:45:118",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 51367,
                  "nodeType": "ExpressionStatement",
                  "src": "15200:45:118"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 51373,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "expression": {
                            "id": 51369,
                            "name": "assets",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 51346,
                            "src": "15263:6:118",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                              "typeString": "address[] calldata"
                            }
                          },
                          "id": 51370,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "15270:6:118",
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "src": "15263:13:118",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "expression": {
                            "id": 51371,
                            "name": "borrowIds",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 51352,
                            "src": "15280:9:118",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                              "typeString": "uint256[] calldata"
                            }
                          },
                          "id": 51372,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "15290:6:118",
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "src": "15280:16:118",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "15263:33:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "65",
                        "id": 51374,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "15298:3:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_a8982c89d80987fb9a510e25981ee9170206be21af3c8e0eb312ef1d3382e761",
                          "typeString": "literal_string \"e\""
                        },
                        "value": "e"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_a8982c89d80987fb9a510e25981ee9170206be21af3c8e0eb312ef1d3382e761",
                          "typeString": "literal_string \"e\""
                        }
                      ],
                      "id": 51368,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "15255:7:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 51375,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15255:47:118",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 51376,
                  "nodeType": "ExpressionStatement",
                  "src": "15255:47:118"
                },
                {
                  "assignments": [
                    51378
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 51378,
                      "mutability": "mutable",
                      "name": "totalAmount",
                      "nameLocation": "15321:11:118",
                      "nodeType": "VariableDeclaration",
                      "scope": 51437,
                      "src": "15313:19:118",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 51377,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "15313:7:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 51379,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "15313:19:118"
                },
                {
                  "body": {
                    "id": 51396,
                    "nodeType": "Block",
                    "src": "15380:49:118",
                    "statements": [
                      {
                        "expression": {
                          "id": 51394,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 51390,
                            "name": "totalAmount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 51378,
                            "src": "15394:11:118",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "baseExpression": {
                              "id": 51391,
                              "name": "amounts",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 51349,
                              "src": "15408:7:118",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                                "typeString": "uint256[] calldata"
                              }
                            },
                            "id": 51393,
                            "indexExpression": {
                              "id": 51392,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 51381,
                              "src": "15416:1:118",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "15408:10:118",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "15394:24:118",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 51395,
                        "nodeType": "ExpressionStatement",
                        "src": "15394:24:118"
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 51386,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 51383,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 51381,
                      "src": "15355:1:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "expression": {
                        "id": 51384,
                        "name": "amounts",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51349,
                        "src": "15359:7:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                          "typeString": "uint256[] calldata"
                        }
                      },
                      "id": 51385,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "15367:6:118",
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "15359:14:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "15355:18:118",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 51397,
                  "initializationExpression": {
                    "assignments": [
                      51381
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 51381,
                        "mutability": "mutable",
                        "name": "i",
                        "nameLocation": "15352:1:118",
                        "nodeType": "VariableDeclaration",
                        "scope": 51397,
                        "src": "15347:6:118",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 51380,
                          "name": "uint",
                          "nodeType": "ElementaryTypeName",
                          "src": "15347:4:118",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 51382,
                    "nodeType": "VariableDeclarationStatement",
                    "src": "15347:6:118"
                  },
                  "loopExpression": {
                    "expression": {
                      "id": 51388,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "15375:3:118",
                      "subExpression": {
                        "id": 51387,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51381,
                        "src": "15375:1:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 51389,
                    "nodeType": "ExpressionStatement",
                    "src": "15375:3:118"
                  },
                  "nodeType": "ForStatement",
                  "src": "15342:87:118"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 51402,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "expression": {
                            "id": 51399,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "15447:3:118",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 51400,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "15451:5:118",
                          "memberName": "value",
                          "nodeType": "MemberAccess",
                          "src": "15447:9:118",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "id": 51401,
                          "name": "totalAmount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 51378,
                          "src": "15460:11:118",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "15447:24:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "expression": {
                          "id": 51403,
                          "name": "Errors",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 56900,
                          "src": "15473:6:118",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_Errors_$56900_$",
                            "typeString": "type(library Errors)"
                          }
                        },
                        "id": 51404,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberLocation": "15480:41:118",
                        "memberName": "WG_MESSAGE_VALUE_LESS_THAN_PAYMENT_AMOUNT",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 56887,
                        "src": "15473:48:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 51398,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "15439:7:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 51405,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15439:83:118",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 51406,
                  "nodeType": "ExpressionStatement",
                  "src": "15439:83:118"
                },
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": [],
                        "expression": {
                          "id": 51407,
                          "name": "WETH",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 50366,
                          "src": "15532:4:118",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IWETH_$47802",
                            "typeString": "contract IWETH"
                          }
                        },
                        "id": 51409,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "15537:7:118",
                        "memberName": "deposit",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 47776,
                        "src": "15532:12:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_payable$__$returns$__$",
                          "typeString": "function () payable external"
                        }
                      },
                      "id": 51411,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "names": [
                        "value"
                      ],
                      "nodeType": "FunctionCallOptions",
                      "options": [
                        {
                          "id": 51410,
                          "name": "totalAmount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 51378,
                          "src": "15552:11:118",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "src": "15532:32:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_payable$__$returns$__$value",
                        "typeString": "function () payable external"
                      }
                    },
                    "id": 51412,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15532:34:118",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 51413,
                  "nodeType": "ExpressionStatement",
                  "src": "15532:34:118"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 51417,
                        "name": "assets",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51346,
                        "src": "15603:6:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                          "typeString": "address[] calldata"
                        }
                      },
                      {
                        "id": 51418,
                        "name": "amounts",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51349,
                        "src": "15611:7:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                          "typeString": "uint256[] calldata"
                        }
                      },
                      {
                        "id": 51419,
                        "name": "borrowIds",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51352,
                        "src": "15620:9:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                          "typeString": "uint256[] calldata"
                        }
                      },
                      {
                        "id": 51420,
                        "name": "onBehalfOfs",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51355,
                        "src": "15631:11:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                          "typeString": "address[] calldata"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                          "typeString": "address[] calldata"
                        },
                        {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                          "typeString": "uint256[] calldata"
                        },
                        {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                          "typeString": "uint256[] calldata"
                        },
                        {
                          "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                          "typeString": "address[] calldata"
                        }
                      ],
                      "expression": {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 51414,
                          "name": "_getLendingPool",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 51528,
                          "src": "15576:15:118",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_ILendingPool_$47057_$",
                            "typeString": "function () view returns (contract ILendingPool)"
                          }
                        },
                        "id": 51415,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "15576:17:118",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ILendingPool_$47057",
                          "typeString": "contract ILendingPool"
                        }
                      },
                      "id": 51416,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "15594:8:118",
                      "memberName": "batchBid",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 46874,
                      "src": "15576:26:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_array$_t_address_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_address_$dyn_memory_ptr_$returns$__$",
                        "typeString": "function (address[] memory,uint256[] memory,uint256[] memory,address[] memory) external"
                      }
                    },
                    "id": 51421,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15576:67:118",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 51422,
                  "nodeType": "ExpressionStatement",
                  "src": "15576:67:118"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 51426,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 51423,
                        "name": "msg",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -15,
                        "src": "15695:3:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_message",
                          "typeString": "msg"
                        }
                      },
                      "id": 51424,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "15699:5:118",
                      "memberName": "value",
                      "nodeType": "MemberAccess",
                      "src": "15695:9:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "id": 51425,
                      "name": "totalAmount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 51378,
                      "src": "15707:11:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "15695:23:118",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 51436,
                  "nodeType": "IfStatement",
                  "src": "15691:82:118",
                  "trueBody": {
                    "expression": {
                      "arguments": [
                        {
                          "expression": {
                            "id": 51428,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "15737:3:118",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 51429,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "15741:6:118",
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "src": "15737:10:118",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 51433,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "id": 51430,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -15,
                              "src": "15749:3:118",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 51431,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "15753:5:118",
                            "memberName": "value",
                            "nodeType": "MemberAccess",
                            "src": "15749:9:118",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "-",
                          "rightExpression": {
                            "id": 51432,
                            "name": "totalAmount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 51378,
                            "src": "15761:11:118",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "15749:23:118",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 51427,
                        "name": "_safeTransferETH",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51465,
                        "src": "15720:16:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                          "typeString": "function (address,uint256)"
                        }
                      },
                      "id": 51434,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "15720:53:118",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 51435,
                    "nodeType": "ExpressionStatement",
                    "src": "15720:53:118"
                  }
                }
              ]
            },
            "baseFunctions": [
              47950
            ],
            "documentation": {
              "id": 51343,
              "nodeType": "StructuredDocumentation",
              "src": "14664:319:118",
              "text": " @dev batch bid purchases the underlying collatearls of a defaulted borrows.\n @param assets addresses of the asset contracts used for payment\n @param amounts the payment amounts\n @param borrowIds the ids of the defaulted borrows\n @param onBehalfOfs The addresses to receive the NFTs."
            },
            "functionSelector": "31a9b157",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "batchBidETH",
            "nameLocation": "14997:11:118",
            "overrides": {
              "id": 51357,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "15181:8:118"
            },
            "parameters": {
              "id": 51356,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 51346,
                  "mutability": "mutable",
                  "name": "assets",
                  "nameLocation": "15037:6:118",
                  "nodeType": "VariableDeclaration",
                  "scope": 51438,
                  "src": "15018:25:118",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 51344,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "15018:7:118",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 51345,
                    "nodeType": "ArrayTypeName",
                    "src": "15018:9:118",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 51349,
                  "mutability": "mutable",
                  "name": "amounts",
                  "nameLocation": "15072:7:118",
                  "nodeType": "VariableDeclaration",
                  "scope": 51438,
                  "src": "15053:26:118",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 51347,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "15053:7:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 51348,
                    "nodeType": "ArrayTypeName",
                    "src": "15053:9:118",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 51352,
                  "mutability": "mutable",
                  "name": "borrowIds",
                  "nameLocation": "15108:9:118",
                  "nodeType": "VariableDeclaration",
                  "scope": 51438,
                  "src": "15089:28:118",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 51350,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "15089:7:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 51351,
                    "nodeType": "ArrayTypeName",
                    "src": "15089:9:118",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 51355,
                  "mutability": "mutable",
                  "name": "onBehalfOfs",
                  "nameLocation": "15146:11:118",
                  "nodeType": "VariableDeclaration",
                  "scope": 51438,
                  "src": "15127:30:118",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 51353,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "15127:7:118",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 51354,
                    "nodeType": "ArrayTypeName",
                    "src": "15127:9:118",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "15008:155:118"
            },
            "returnParameters": {
              "id": 51358,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "15190:0:118"
            },
            "scope": 51570,
            "stateMutability": "payable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 51465,
            "nodeType": "FunctionDefinition",
            "src": "15940:190:118",
            "nodes": [],
            "body": {
              "id": 51464,
              "nodeType": "Block",
              "src": "16002:128:118",
              "nodes": [],
              "statements": [
                {
                  "assignments": [
                    51447,
                    null
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 51447,
                      "mutability": "mutable",
                      "name": "success",
                      "nameLocation": "16018:7:118",
                      "nodeType": "VariableDeclaration",
                      "scope": 51464,
                      "src": "16013:12:118",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 51446,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "16013:4:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "visibility": "internal"
                    },
                    null
                  ],
                  "id": 51457,
                  "initialValue": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "hexValue": "30",
                            "id": 51454,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "16063:1:118",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            }
                          ],
                          "id": 51453,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "NewExpression",
                          "src": "16053:9:118",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function (uint256) pure returns (bytes memory)"
                          },
                          "typeName": {
                            "id": 51452,
                            "name": "bytes",
                            "nodeType": "ElementaryTypeName",
                            "src": "16057:5:118",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_storage_ptr",
                              "typeString": "bytes"
                            }
                          }
                        },
                        "id": 51455,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "16053:12:118",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        ],
                        "expression": {
                          "id": 51448,
                          "name": "to",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 51441,
                          "src": "16031:2:118",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 51449,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "16034:4:118",
                        "memberName": "call",
                        "nodeType": "MemberAccess",
                        "src": "16031:7:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                          "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                        }
                      },
                      "id": 51451,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "names": [
                        "value"
                      ],
                      "nodeType": "FunctionCallOptions",
                      "options": [
                        {
                          "id": 51450,
                          "name": "value",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 51443,
                          "src": "16046:5:118",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "src": "16031:21:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value",
                        "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                      }
                    },
                    "id": 51456,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16031:35:118",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                      "typeString": "tuple(bool,bytes memory)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "16012:54:118"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 51459,
                        "name": "success",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51447,
                        "src": "16084:7:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "expression": {
                          "id": 51460,
                          "name": "Errors",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 56900,
                          "src": "16093:6:118",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_Errors_$56900_$",
                            "typeString": "type(library Errors)"
                          }
                        },
                        "id": 51461,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberLocation": "16100:22:118",
                        "memberName": "WG_ETH_TRANSFER_FAILED",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 56893,
                        "src": "16093:29:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 51458,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "16076:7:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 51462,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16076:47:118",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 51463,
                  "nodeType": "ExpressionStatement",
                  "src": "16076:47:118"
                }
              ]
            },
            "documentation": {
              "id": 51439,
              "nodeType": "StructuredDocumentation",
              "src": "15786:149:118",
              "text": " @dev transfer ETH to an address, revert if it fails.\n @param to recipient of the transfer\n @param value the amount to send"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_safeTransferETH",
            "nameLocation": "15949:16:118",
            "parameters": {
              "id": 51444,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 51441,
                  "mutability": "mutable",
                  "name": "to",
                  "nameLocation": "15974:2:118",
                  "nodeType": "VariableDeclaration",
                  "scope": 51465,
                  "src": "15966:10:118",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 51440,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "15966:7:118",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 51443,
                  "mutability": "mutable",
                  "name": "value",
                  "nameLocation": "15986:5:118",
                  "nodeType": "VariableDeclaration",
                  "scope": 51465,
                  "src": "15978:13:118",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 51442,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "15978:7:118",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "15965:27:118"
            },
            "returnParameters": {
              "id": 51445,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "16002:0:118"
            },
            "scope": 51570,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 51486,
            "nodeType": "FunctionDefinition",
            "src": "16413:184:118",
            "nodes": [],
            "body": {
              "id": 51485,
              "nodeType": "Block",
              "src": "16546:51:118",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 51481,
                        "name": "to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51470,
                        "src": "16579:2:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 51482,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51472,
                        "src": "16583:6:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "arguments": [
                          {
                            "id": 51478,
                            "name": "token",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 51468,
                            "src": "16563:5:118",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 51477,
                          "name": "IERC20",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 33440,
                          "src": "16556:6:118",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_IERC20_$33440_$",
                            "typeString": "type(contract IERC20)"
                          }
                        },
                        "id": 51479,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "16556:13:118",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$33440",
                          "typeString": "contract IERC20"
                        }
                      },
                      "id": 51480,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "16570:8:118",
                      "memberName": "transfer",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 33407,
                      "src": "16556:22:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                        "typeString": "function (address,uint256) external returns (bool)"
                      }
                    },
                    "id": 51483,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16556:34:118",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 51484,
                  "nodeType": "ExpressionStatement",
                  "src": "16556:34:118"
                }
              ]
            },
            "documentation": {
              "id": 51466,
              "nodeType": "StructuredDocumentation",
              "src": "16136:272:118",
              "text": " @dev transfer ERC20 from the utility contract, for ERC20 recovery in case of stuck tokens due\n direct transfers to the contract address.\n @param token token to transfer\n @param to recipient of the transfer\n @param amount amount to send"
            },
            "functionSelector": "a3d5b255",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 51475,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 51474,
                  "name": "onlyEmergencyAdmin",
                  "nameLocations": [
                    "16527:18:118"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 50422,
                  "src": "16527:18:118"
                },
                "nodeType": "ModifierInvocation",
                "src": "16527:18:118"
              }
            ],
            "name": "emergencyTokenTransfer",
            "nameLocation": "16422:22:118",
            "parameters": {
              "id": 51473,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 51468,
                  "mutability": "mutable",
                  "name": "token",
                  "nameLocation": "16462:5:118",
                  "nodeType": "VariableDeclaration",
                  "scope": 51486,
                  "src": "16454:13:118",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 51467,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "16454:7:118",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 51470,
                  "mutability": "mutable",
                  "name": "to",
                  "nameLocation": "16485:2:118",
                  "nodeType": "VariableDeclaration",
                  "scope": 51486,
                  "src": "16477:10:118",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 51469,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "16477:7:118",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 51472,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "16505:6:118",
                  "nodeType": "VariableDeclaration",
                  "scope": 51486,
                  "src": "16497:14:118",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 51471,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "16497:7:118",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "16444:73:118"
            },
            "returnParameters": {
              "id": 51476,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "16546:0:118"
            },
            "scope": 51570,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 51502,
            "nodeType": "FunctionDefinition",
            "src": "16900:133:118",
            "nodes": [],
            "body": {
              "id": 51501,
              "nodeType": "Block",
              "src": "16988:45:118",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 51497,
                        "name": "to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51489,
                        "src": "17015:2:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 51498,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51491,
                        "src": "17019:6:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 51496,
                      "name": "_safeTransferETH",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 51465,
                      "src": "16998:16:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256)"
                      }
                    },
                    "id": 51499,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16998:28:118",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 51500,
                  "nodeType": "ExpressionStatement",
                  "src": "16998:28:118"
                }
              ]
            },
            "documentation": {
              "id": 51487,
              "nodeType": "StructuredDocumentation",
              "src": "16603:292:118",
              "text": " @dev transfer native Ether from the utility contract, for native Ether recovery in case of stuck Ether\n due selfdestructs or transfer ether to pre-computated contract address before deployment.\n @param to recipient of the transfer\n @param amount amount to send"
            },
            "functionSelector": "eed88b8d",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 51494,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 51493,
                  "name": "onlyEmergencyAdmin",
                  "nameLocations": [
                    "16969:18:118"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 50422,
                  "src": "16969:18:118"
                },
                "nodeType": "ModifierInvocation",
                "src": "16969:18:118"
              }
            ],
            "name": "emergencyEtherTransfer",
            "nameLocation": "16909:22:118",
            "parameters": {
              "id": 51492,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 51489,
                  "mutability": "mutable",
                  "name": "to",
                  "nameLocation": "16940:2:118",
                  "nodeType": "VariableDeclaration",
                  "scope": 51502,
                  "src": "16932:10:118",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 51488,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "16932:7:118",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 51491,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "16952:6:118",
                  "nodeType": "VariableDeclaration",
                  "scope": 51502,
                  "src": "16944:14:118",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 51490,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "16944:7:118",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "16931:28:118"
            },
            "returnParameters": {
              "id": 51495,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "16988:0:118"
            },
            "scope": 51570,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 51514,
            "nodeType": "FunctionDefinition",
            "src": "17102:95:118",
            "nodes": [],
            "body": {
              "id": 51513,
              "nodeType": "Block",
              "src": "17160:37:118",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 51510,
                        "name": "WETH",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 50366,
                        "src": "17185:4:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IWETH_$47802",
                          "typeString": "contract IWETH"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_IWETH_$47802",
                          "typeString": "contract IWETH"
                        }
                      ],
                      "id": 51509,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "17177:7:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": {
                        "id": 51508,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "17177:7:118",
                        "typeDescriptions": {}
                      }
                    },
                    "id": 51511,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17177:13:118",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 51507,
                  "id": 51512,
                  "nodeType": "Return",
                  "src": "17170:20:118"
                }
              ]
            },
            "documentation": {
              "id": 51503,
              "nodeType": "StructuredDocumentation",
              "src": "17039:58:118",
              "text": " @dev Get WETH address used by WETHGateway"
            },
            "functionSelector": "affa8817",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getWETHAddress",
            "nameLocation": "17111:14:118",
            "parameters": {
              "id": 51504,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "17125:2:118"
            },
            "returnParameters": {
              "id": 51507,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 51506,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 51514,
                  "src": "17151:7:118",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 51505,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "17151:7:118",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "17150:9:118"
            },
            "scope": 51570,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 51528,
            "nodeType": "FunctionDefinition",
            "src": "17244:136:118",
            "nodes": [],
            "body": {
              "id": 51527,
              "nodeType": "Block",
              "src": "17308:72:118",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "id": 51522,
                            "name": "_addressProvider",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 50369,
                            "src": "17338:16:118",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IAddressProvider_$45420",
                              "typeString": "contract IAddressProvider"
                            }
                          },
                          "id": 51523,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "17355:14:118",
                          "memberName": "getLendingPool",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 45229,
                          "src": "17338:31:118",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
                            "typeString": "function () view external returns (address)"
                          }
                        },
                        "id": 51524,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "17338:33:118",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 51521,
                      "name": "ILendingPool",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 47057,
                      "src": "17325:12:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_ILendingPool_$47057_$",
                        "typeString": "type(contract ILendingPool)"
                      }
                    },
                    "id": 51525,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17325:47:118",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ILendingPool_$47057",
                      "typeString": "contract ILendingPool"
                    }
                  },
                  "functionReturnParameters": 51520,
                  "id": 51526,
                  "nodeType": "Return",
                  "src": "17318:54:118"
                }
              ]
            },
            "documentation": {
              "id": 51515,
              "nodeType": "StructuredDocumentation",
              "src": "17203:36:118",
              "text": " @dev Get cachedPool"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_getLendingPool",
            "nameLocation": "17253:15:118",
            "parameters": {
              "id": 51516,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "17268:2:118"
            },
            "returnParameters": {
              "id": 51520,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 51519,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 51528,
                  "src": "17294:12:118",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ILendingPool_$47057",
                    "typeString": "contract ILendingPool"
                  },
                  "typeName": {
                    "id": 51518,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 51517,
                      "name": "ILendingPool",
                      "nameLocations": [
                        "17294:12:118"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 47057,
                      "src": "17294:12:118"
                    },
                    "referencedDeclaration": 47057,
                    "src": "17294:12:118",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ILendingPool_$47057",
                      "typeString": "contract ILendingPool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "17293:14:118"
            },
            "scope": 51570,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 51542,
            "nodeType": "FunctionDefinition",
            "src": "17425:160:118",
            "nodes": [],
            "body": {
              "id": 51541,
              "nodeType": "Block",
              "src": "17501:84:118",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "id": 51536,
                            "name": "_addressProvider",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 50369,
                            "src": "17537:16:118",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IAddressProvider_$45420",
                              "typeString": "contract IAddressProvider"
                            }
                          },
                          "id": 51537,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "17554:20:118",
                          "memberName": "getCollateralManager",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 45254,
                          "src": "17537:37:118",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
                            "typeString": "function () view external returns (address)"
                          }
                        },
                        "id": 51538,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "17537:39:118",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 51535,
                      "name": "ICollateralManager",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 45758,
                      "src": "17518:18:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_ICollateralManager_$45758_$",
                        "typeString": "type(contract ICollateralManager)"
                      }
                    },
                    "id": 51539,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17518:59:118",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ICollateralManager_$45758",
                      "typeString": "contract ICollateralManager"
                    }
                  },
                  "functionReturnParameters": 51534,
                  "id": 51540,
                  "nodeType": "Return",
                  "src": "17511:66:118"
                }
              ]
            },
            "documentation": {
              "id": 51529,
              "nodeType": "StructuredDocumentation",
              "src": "17386:34:118",
              "text": " @dev Get cachedCM"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_getCollateralManager",
            "nameLocation": "17434:21:118",
            "parameters": {
              "id": 51530,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "17455:2:118"
            },
            "returnParameters": {
              "id": 51534,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 51533,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 51542,
                  "src": "17481:18:118",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ICollateralManager_$45758",
                    "typeString": "contract ICollateralManager"
                  },
                  "typeName": {
                    "id": 51532,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 51531,
                      "name": "ICollateralManager",
                      "nameLocations": [
                        "17481:18:118"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 45758,
                      "src": "17481:18:118"
                    },
                    "referencedDeclaration": 45758,
                    "src": "17481:18:118",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ICollateralManager_$45758",
                      "typeString": "contract ICollateralManager"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "17480:20:118"
            },
            "scope": 51570,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 51559,
            "nodeType": "FunctionDefinition",
            "src": "17725:111:118",
            "nodes": [],
            "body": {
              "id": 51558,
              "nodeType": "Block",
              "src": "17752:84:118",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 51553,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "expression": {
                            "id": 51547,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "17770:3:118",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 51548,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "17774:6:118",
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "src": "17770:10:118",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "arguments": [
                            {
                              "id": 51551,
                              "name": "WETH",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 50366,
                              "src": "17792:4:118",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IWETH_$47802",
                                "typeString": "contract IWETH"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_IWETH_$47802",
                                "typeString": "contract IWETH"
                              }
                            ],
                            "id": 51550,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "17784:7:118",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 51549,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "17784:7:118",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 51552,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "17784:13:118",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "17770:27:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "expression": {
                          "id": 51554,
                          "name": "Errors",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 56900,
                          "src": "17799:6:118",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_Errors_$56900_$",
                            "typeString": "type(library Errors)"
                          }
                        },
                        "id": 51555,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberLocation": "17806:22:118",
                        "memberName": "WG_RECEIVE_NOT_ALLOWED",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 56896,
                        "src": "17799:29:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 51546,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "17762:7:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 51556,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17762:67:118",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 51557,
                  "nodeType": "ExpressionStatement",
                  "src": "17762:67:118"
                }
              ]
            },
            "documentation": {
              "id": 51543,
              "nodeType": "StructuredDocumentation",
              "src": "17591:129:118",
              "text": " @dev Only WETH contract is allowed to transfer ETH here. Prevent other addresses to send Ether to this contract."
            },
            "implemented": true,
            "kind": "receive",
            "modifiers": [],
            "name": "",
            "nameLocation": "-1:-1:-1",
            "parameters": {
              "id": 51544,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "17732:2:118"
            },
            "returnParameters": {
              "id": 51545,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "17752:0:118"
            },
            "scope": 51570,
            "stateMutability": "payable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 51569,
            "nodeType": "FunctionDefinition",
            "src": "17890:83:118",
            "nodes": [],
            "body": {
              "id": 51568,
              "nodeType": "Block",
              "src": "17918:55:118",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 51564,
                          "name": "Errors",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 56900,
                          "src": "17935:6:118",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_Errors_$56900_$",
                            "typeString": "type(library Errors)"
                          }
                        },
                        "id": 51565,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberLocation": "17942:23:118",
                        "memberName": "WG_FALLBACK_NOT_ALLOWED",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 56899,
                        "src": "17935:30:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 51563,
                      "name": "revert",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -19,
                        -19
                      ],
                      "referencedDeclaration": -19,
                      "src": "17928:6:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (string memory) pure"
                      }
                    },
                    "id": 51566,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17928:38:118",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 51567,
                  "nodeType": "ExpressionStatement",
                  "src": "17928:38:118"
                }
              ]
            },
            "documentation": {
              "id": 51560,
              "nodeType": "StructuredDocumentation",
              "src": "17842:43:118",
              "text": " @dev Revert fallback calls"
            },
            "implemented": true,
            "kind": "fallback",
            "modifiers": [],
            "name": "",
            "nameLocation": "-1:-1:-1",
            "parameters": {
              "id": 51561,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "17898:2:118"
            },
            "returnParameters": {
              "id": 51562,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "17918:0:118"
            },
            "scope": 51570,
            "stateMutability": "payable",
            "virtual": false,
            "visibility": "external"
          }
        ],
        "abstract": false,
        "baseContracts": [
          {
            "baseName": {
              "id": 50356,
              "name": "IWETHGateway",
              "nameLocations": [
                "1123:12:118"
              ],
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 47954,
              "src": "1123:12:118"
            },
            "id": 50357,
            "nodeType": "InheritanceSpecifier",
            "src": "1123:12:118"
          },
          {
            "baseName": {
              "id": 50358,
              "name": "ContextUpgradeable",
              "nameLocations": [
                "1137:18:118"
              ],
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 28988,
              "src": "1137:18:118"
            },
            "id": 50359,
            "nodeType": "InheritanceSpecifier",
            "src": "1137:18:118"
          }
        ],
        "canonicalName": "WETHGateway",
        "contractDependencies": [],
        "contractKind": "contract",
        "fullyImplemented": true,
        "linearizedBaseContracts": [
          51570,
          28988,
          26136,
          47954
        ],
        "name": "WETHGateway",
        "nameLocation": "1108:11:118",
        "scope": 51571,
        "usedErrors": []
      }
    ],
    "license": "AGPL-3.0"
  },
  "id": 118
}

Last updated