{
  "contractName": "SwappaRouterV1",
  "abi": [
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "input",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "output",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "inputAmount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "outputAmount",
          "type": "uint256"
        }
      ],
      "name": "Swap",
      "type": "event"
    },
    {
      "stateMutability": "payable",
      "type": "receive"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "path",
          "type": "address[]"
        },
        {
          "internalType": "address[]",
          "name": "pairs",
          "type": "address[]"
        },
        {
          "internalType": "bytes[]",
          "name": "extras",
          "type": "bytes[]"
        },
        {
          "internalType": "uint256",
          "name": "inputAmount",
          "type": "uint256"
        }
      ],
      "name": "getOutputAmount",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "outputAmount",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "path",
          "type": "address[]"
        },
        {
          "internalType": "address[]",
          "name": "pairs",
          "type": "address[]"
        },
        {
          "internalType": "bytes[]",
          "name": "extras",
          "type": "bytes[]"
        },
        {
          "internalType": "uint256",
          "name": "inputAmount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "minOutputAmount",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "deadline",
          "type": "uint256"
        }
      ],
      "name": "swapExactInputForOutput",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "outputAmount",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "path",
          "type": "address[]"
        },
        {
          "internalType": "address[]",
          "name": "pairs",
          "type": "address[]"
        },
        {
          "internalType": "bytes[]",
          "name": "extras",
          "type": "bytes[]"
        },
        {
          "internalType": "uint256",
          "name": "inputAmount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "minOutputAmount",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "deadline",
          "type": "uint256"
        }
      ],
      "name": "swapExactInputForOutputWithPrecheck",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "outputAmount",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.6.8+commit.0bbfe453\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"input\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"output\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"inputAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"outputAmount\",\"type\":\"uint256\"}],\"name\":\"Swap\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"path\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"pairs\",\"type\":\"address[]\"},{\"internalType\":\"bytes[]\",\"name\":\"extras\",\"type\":\"bytes[]\"},{\"internalType\":\"uint256\",\"name\":\"inputAmount\",\"type\":\"uint256\"}],\"name\":\"getOutputAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"outputAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"path\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"pairs\",\"type\":\"address[]\"},{\"internalType\":\"bytes[]\",\"name\":\"extras\",\"type\":\"bytes[]\"},{\"internalType\":\"uint256\",\"name\":\"inputAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minOutputAmount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"swapExactInputForOutput\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"outputAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"path\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"pairs\",\"type\":\"address[]\"},{\"internalType\":\"bytes[]\",\"name\":\"extras\",\"type\":\"bytes[]\"},{\"internalType\":\"uint256\",\"name\":\"inputAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minOutputAmount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"swapExactInputForOutputWithPrecheck\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"outputAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"methods\":{}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"project:/contracts/swappa/SwappaRouterV1.sol\":\"SwappaRouterV1\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/GSN/Context.sol\":{\"keccak256\":\"0xdb26cbf4d028490f49831a7865c2fe1b28db44b535ca8d343785a3b768aae183\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://840b14ce0315c47d49ba328f1f9fa7654ded1c9e1559e6c5e777a7b2dc28bf0a\",\"dweb:/ipfs/QmTLLabn4wcfGro9LEmUXUN2nwKqZSotXMvjDCLXEnLtZP\"]},\"@openzeppelin/contracts/math/SafeMath.sol\":{\"keccak256\":\"0x9a9cf02622cd7a64261b10534fc3260449da25c98c9e96d1b4ae8110a20e5806\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2df142592d1dc267d9549049ee3317fa190d2f87eaa565f86ab05ec83f7ab8f5\",\"dweb:/ipfs/QmSkJtcfWo7c42KnL5hho6GFxK6HRNV91XABx1P7xDtfLV\"]},\"@openzeppelin/contracts/token/ERC20/ERC20.sol\":{\"keccak256\":\"0x91e0bd6a6762d2a1700dab0849de8422611355100576c4beef1e80d82a4104a0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://73bbd77af0a8b07255d2ffa20728bcf13b116007c9ddac5d37046cfabb0e1e02\",\"dweb:/ipfs/QmRgZgWCWCSMTTaok6o4QvWA6MgB4goS8qpb3sN7bAvaZ9\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x5c26b39d26f7ed489e555d955dcd3e01872972e71fdd1528e93ec164e4f23385\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://efdc632af6960cf865dbc113665ea1f5b90eab75cc40ec062b2f6ae6da582017\",\"dweb:/ipfs/QmfAZFDuG62vxmAN9DnXApv7e7PMzPqi4RkqqZHLMSQiY5\"]},\"@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xf5fa8cbdffa5ef8be49b246b5628facc30b71707e78a45d80d93b64eff3fe390\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://774e78a9ff32792cc95db4d2ceaf3a7965bb7f0bea5e6cb7cff182b450d44b37\",\"dweb:/ipfs/QmRRMC4uj7eAcLW7chynA3sNEYULMFazdLwQHKHQPyzAbA\"]},\"project:/contracts/swappa/ISwappaPairV1.sol\":{\"keccak256\":\"0x3ad68981bda91ed83c5e9ee8617f08bb5e208208477fb755cc77077f127010ab\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8e4390b1bebc39f58bff34b9099a646ead67cef27b722ef61548487251cca719\",\"dweb:/ipfs/QmRWEuYyjHaS957VKWtTfDpzfqkXb2bvEsS33meAC76ZuU\"]},\"project:/contracts/swappa/ISwappaRouterV1.sol\":{\"keccak256\":\"0xf474ec7613e7b678e7546dec554ef5344685801175fb5944126b4a7573c9e5ad\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a9edda99b3fb23f1a9e14cf45869db3c0ef057d33a4a49d46cde03e5882876d9\",\"dweb:/ipfs/QmPke9VWBqQ6mhF4dLiexrv8GUHqDsyoVDyDWNvQvpQA9m\"]},\"project:/contracts/swappa/SwappaRouterV1.sol\":{\"keccak256\":\"0xc874eb729001f76ae03e60546ae3ea945c07580dd2036767c07afe201d7ba020\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://53d92d42b46a1c0971dda7bd3b5375428f9fbeacc5eafa41afe3784e1e22a328\",\"dweb:/ipfs/QmQFg6jBuMVMTsLEc3r5AQ5YMAMVz64n5GwCTfndbaueNG\"]}},\"version\":1}",
  "bytecode": "0x608060405234801561001057600080fd5b50611409806100206000396000f3fe6080604052600436106100385760003560e01c80630862d12f14610044578063adf6fa021461007a578063e2f46a001461009a5761003f565b3661003f57005b600080fd5b34801561005057600080fd5b5061006461005f366004610d93565b6100ba565b6040516100719190611365565b60405180910390f35b34801561008657600080fd5b50610064610095366004610d93565b610666565b3480156100a657600080fd5b506100646100b5366004610cf4565b610b2b565b600081428110156100e65760405162461bcd60e51b81526004016100dd90611217565b60405180910390fd5b600189018b146101085760405162461bcd60e51b81526004016100dd906112ab565b8887146101275760405162461bcd60e51b81526004016100dd9061124e565b886101445760405162461bcd60e51b81526004016100dd906110a3565b8b8b600081811061015157fe5b90506020020160208101906101669190610cd2565b73ffffffffffffffffffffffffffffffffffffffff166323b872dd338c8c600081811061018f57fe5b90506020020160208101906101a49190610cd2565b896040518463ffffffff1660e01b81526004016101c393929190610f18565b602060405180830381600087803b1580156101dd57600080fd5b505af11580156101f1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102159190610e56565b6102315760405162461bcd60e51b81526004016100dd90611100565b60005b898110156103e6576000808e8e8481811061024b57fe5b90506020020160208101906102609190610cd2565b8f8f8560010181811061026f57fe5b90506020020160208101906102849190610cd2565b909250905060007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8d0184106102ba57306102de565b8d8d856001018181106102c957fe5b90506020020160208101906102de9190610cd2565b905060608c8c868181106102ee57fe5b9050602002810190610300919061136e565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505090508e8e8681811061035157fe5b90506020020160208101906103669190610cd2565b73ffffffffffffffffffffffffffffffffffffffff166332ef8314858585856040518563ffffffff1660e01b81526004016103a49493929190610f49565b600060405180830381600087803b1580156103be57600080fd5b505af11580156103d2573d6000803e3d6000fd5b505060019096019550610234945050505050565b5060008c8c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810181811061041757fe5b905060200201602081019061042c9190610cd2565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815290915073ffffffffffffffffffffffffffffffffffffffff8216906370a0823190610481903090600401610ef7565b60206040518083038186803b15801561049957600080fd5b505afa1580156104ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104d19190610e76565b9250858310156104f35760405162461bcd60e51b81526004016100dd90611308565b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82169063a9059cbb90610547908890879060040161104f565b602060405180830381600087803b15801561056157600080fd5b505af1158015610575573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105999190610e56565b6105b55760405162461bcd60e51b81526004016100dd906111ba565b8073ffffffffffffffffffffffffffffffffffffffff168d8d60008181106105d957fe5b90506020020160208101906105ee9190610cd2565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f20efd6d5195b7b50273f01cd79a27989255356f9f13293edc53ee142accfdb75888b8860405161064e93929190611075565b60405180910390a450509a9950505050505050505050565b600081428110156106895760405162461bcd60e51b81526004016100dd90611217565b600189018b146106ab5760405162461bcd60e51b81526004016100dd906112ab565b8887146106ca5760405162461bcd60e51b81526004016100dd9061124e565b886106e75760405162461bcd60e51b81526004016100dd906110a3565b85915060005b89811015610868576000808e8e8481811061070457fe5b90506020020160208101906107199190610cd2565b8f8f8560010181811061072857fe5b905060200201602081019061073d9190610cd2565b9150915060608b8b8581811061074f57fe5b9050602002810190610761919061136e565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505090508d8d858181106107b257fe5b90506020020160208101906107c79190610cd2565b73ffffffffffffffffffffffffffffffffffffffff16637eace892848489856040518563ffffffff1660e01b81526004016108059493929190611010565b602060405180830381600087803b15801561081f57600080fd5b505af1158015610833573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108579190610e76565b955050600190920191506106ed9050565b50848210156108895760405162461bcd60e51b81526004016100dd9061115d565b8b8b600081811061089657fe5b90506020020160208101906108ab9190610cd2565b73ffffffffffffffffffffffffffffffffffffffff166323b872dd338c8c60008181106108d457fe5b90506020020160208101906108e99190610cd2565b896040518463ffffffff1660e01b815260040161090893929190610f18565b602060405180830381600087803b15801561092257600080fd5b505af1158015610936573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061095a9190610e56565b6109765760405162461bcd60e51b81526004016100dd90611100565b60005b898110156103e6576000808e8e8481811061099057fe5b90506020020160208101906109a59190610cd2565b8f8f856001018181106109b457fe5b90506020020160208101906109c99190610cd2565b909250905060007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8d0184106109ff5730610a23565b8d8d85600101818110610a0e57fe5b9050602002016020810190610a239190610cd2565b905060608c8c86818110610a3357fe5b9050602002810190610a45919061136e565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505090508e8e86818110610a9657fe5b9050602002016020810190610aab9190610cd2565b73ffffffffffffffffffffffffffffffffffffffff166332ef8314858585856040518563ffffffff1660e01b8152600401610ae99493929190610f49565b600060405180830381600087803b158015610b0357600080fd5b505af1158015610b17573d6000803e3d6000fd5b505060019096019550610979945050505050565b8060005b85811015610c5357868682818110610b4357fe5b9050602002016020810190610b589190610cd2565b73ffffffffffffffffffffffffffffffffffffffff16637eace8928a8a84818110610b7f57fe5b9050602002016020810190610b949190610cd2565b8b8b85600101818110610ba357fe5b9050602002016020810190610bb89190610cd2565b85898987818110610bc557fe5b9050602002810190610bd7919061136e565b6040518663ffffffff1660e01b8152600401610bf7959493929190610f94565b602060405180830381600087803b158015610c1157600080fd5b505af1158015610c25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c499190610e76565b9150600101610b2f565b50979650505050505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610c8357600080fd5b92915050565b60008083601f840112610c9a578182fd5b50813567ffffffffffffffff811115610cb1578182fd5b6020830191508360208083028501011115610ccb57600080fd5b9250929050565b600060208284031215610ce3578081fd5b610ced8383610c5f565b9392505050565b60008060008060008060006080888a031215610d0e578283fd5b873567ffffffffffffffff80821115610d25578485fd5b610d318b838c01610c89565b909950975060208a0135915080821115610d49578485fd5b610d558b838c01610c89565b909750955060408a0135915080821115610d6d578485fd5b50610d7a8a828b01610c89565b989b979a50959894979596606090950135949350505050565b60008060008060008060008060008060e08b8d031215610db1578283fd5b8a3567ffffffffffffffff80821115610dc8578485fd5b610dd48e838f01610c89565b909c509a5060208d0135915080821115610dec578485fd5b610df88e838f01610c89565b909a50985060408d0135915080821115610e10578485fd5b50610e1d8d828e01610c89565b90975095505060608b0135935060808b01359250610e3e8c60a08d01610c5f565b915060c08b013590509295989b9194979a5092959850565b600060208284031215610e67578081fd5b81518015158114610ced578182fd5b600060208284031215610e87578081fd5b5051919050565b60008151808452815b81811015610eb357602081850181015186830182015201610e97565b81811115610ec45782602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b73ffffffffffffffffffffffffffffffffffffffff9384168152919092166020820152604081019190915260600190565b600073ffffffffffffffffffffffffffffffffffffffff8087168352808616602084015280851660408401525060806060830152610f8a6080830184610e8e565b9695505050505050565b600073ffffffffffffffffffffffffffffffffffffffff808816835280871660208401525084604083015260806060830152826080830152828460a084013781830160a090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0160101949350505050565b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525083604083015260806060830152610f8a6080830184610e8e565b73ffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b73ffffffffffffffffffffffffffffffffffffffff9390931683526020830191909152604082015260600190565b6020808252602a908201527f537761707061526f757465723a204d7573742068617665206174206c6561737460408201527f206f6e6520706169722100000000000000000000000000000000000000000000606082015260800190565b6020808252602a908201527f537761707061526f757465723a20496e697469616c207472616e73666572467260408201527f6f6d206661696c65642100000000000000000000000000000000000000000000606082015260800190565b60208082526032908201527f537761707061526f757465723a20496e73756666696369656e7420657870656360408201527f746564206f757470757420616d6f756e74210000000000000000000000000000606082015260800190565b60208082526024908201527f537761707061526f757465723a2046696e616c207472616e736665722066616960408201527f6c65642100000000000000000000000000000000000000000000000000000000606082015260800190565b60208082526016908201527f537761707061526f757465723a20457870697265642100000000000000000000604082015260600190565b60208082526028908201527f537761707061526f757465723a20506169727320616e6420457874726173206d60408201527f69736d6174636821000000000000000000000000000000000000000000000000606082015260800190565b60208082526026908201527f537761707061526f757465723a205061746820616e64205061697273206d697360408201527f6d61746368210000000000000000000000000000000000000000000000000000606082015260800190565b60208082526029908201527f537761707061526f757465723a20496e73756666696369656e74206f7574707560408201527f7420616d6f756e74210000000000000000000000000000000000000000000000606082015260800190565b90815260200190565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126113a2578283fd5b8084018035925067ffffffffffffffff8311156113bd578384fd5b60200192505036819003821315610ccb57600080fdfea264697066735822122021708253f669860d51e7d8737f8edb914985197756f9de57503f907adce56b1164736f6c63430006080033",
  "deployedBytecode": "0x6080604052600436106100385760003560e01c80630862d12f14610044578063adf6fa021461007a578063e2f46a001461009a5761003f565b3661003f57005b600080fd5b34801561005057600080fd5b5061006461005f366004610d93565b6100ba565b6040516100719190611365565b60405180910390f35b34801561008657600080fd5b50610064610095366004610d93565b610666565b3480156100a657600080fd5b506100646100b5366004610cf4565b610b2b565b600081428110156100e65760405162461bcd60e51b81526004016100dd90611217565b60405180910390fd5b600189018b146101085760405162461bcd60e51b81526004016100dd906112ab565b8887146101275760405162461bcd60e51b81526004016100dd9061124e565b886101445760405162461bcd60e51b81526004016100dd906110a3565b8b8b600081811061015157fe5b90506020020160208101906101669190610cd2565b73ffffffffffffffffffffffffffffffffffffffff166323b872dd338c8c600081811061018f57fe5b90506020020160208101906101a49190610cd2565b896040518463ffffffff1660e01b81526004016101c393929190610f18565b602060405180830381600087803b1580156101dd57600080fd5b505af11580156101f1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102159190610e56565b6102315760405162461bcd60e51b81526004016100dd90611100565b60005b898110156103e6576000808e8e8481811061024b57fe5b90506020020160208101906102609190610cd2565b8f8f8560010181811061026f57fe5b90506020020160208101906102849190610cd2565b909250905060007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8d0184106102ba57306102de565b8d8d856001018181106102c957fe5b90506020020160208101906102de9190610cd2565b905060608c8c868181106102ee57fe5b9050602002810190610300919061136e565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505090508e8e8681811061035157fe5b90506020020160208101906103669190610cd2565b73ffffffffffffffffffffffffffffffffffffffff166332ef8314858585856040518563ffffffff1660e01b81526004016103a49493929190610f49565b600060405180830381600087803b1580156103be57600080fd5b505af11580156103d2573d6000803e3d6000fd5b505060019096019550610234945050505050565b5060008c8c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810181811061041757fe5b905060200201602081019061042c9190610cd2565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815290915073ffffffffffffffffffffffffffffffffffffffff8216906370a0823190610481903090600401610ef7565b60206040518083038186803b15801561049957600080fd5b505afa1580156104ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104d19190610e76565b9250858310156104f35760405162461bcd60e51b81526004016100dd90611308565b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82169063a9059cbb90610547908890879060040161104f565b602060405180830381600087803b15801561056157600080fd5b505af1158015610575573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105999190610e56565b6105b55760405162461bcd60e51b81526004016100dd906111ba565b8073ffffffffffffffffffffffffffffffffffffffff168d8d60008181106105d957fe5b90506020020160208101906105ee9190610cd2565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f20efd6d5195b7b50273f01cd79a27989255356f9f13293edc53ee142accfdb75888b8860405161064e93929190611075565b60405180910390a450509a9950505050505050505050565b600081428110156106895760405162461bcd60e51b81526004016100dd90611217565b600189018b146106ab5760405162461bcd60e51b81526004016100dd906112ab565b8887146106ca5760405162461bcd60e51b81526004016100dd9061124e565b886106e75760405162461bcd60e51b81526004016100dd906110a3565b85915060005b89811015610868576000808e8e8481811061070457fe5b90506020020160208101906107199190610cd2565b8f8f8560010181811061072857fe5b905060200201602081019061073d9190610cd2565b9150915060608b8b8581811061074f57fe5b9050602002810190610761919061136e565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505090508d8d858181106107b257fe5b90506020020160208101906107c79190610cd2565b73ffffffffffffffffffffffffffffffffffffffff16637eace892848489856040518563ffffffff1660e01b81526004016108059493929190611010565b602060405180830381600087803b15801561081f57600080fd5b505af1158015610833573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108579190610e76565b955050600190920191506106ed9050565b50848210156108895760405162461bcd60e51b81526004016100dd9061115d565b8b8b600081811061089657fe5b90506020020160208101906108ab9190610cd2565b73ffffffffffffffffffffffffffffffffffffffff166323b872dd338c8c60008181106108d457fe5b90506020020160208101906108e99190610cd2565b896040518463ffffffff1660e01b815260040161090893929190610f18565b602060405180830381600087803b15801561092257600080fd5b505af1158015610936573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061095a9190610e56565b6109765760405162461bcd60e51b81526004016100dd90611100565b60005b898110156103e6576000808e8e8481811061099057fe5b90506020020160208101906109a59190610cd2565b8f8f856001018181106109b457fe5b90506020020160208101906109c99190610cd2565b909250905060007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8d0184106109ff5730610a23565b8d8d85600101818110610a0e57fe5b9050602002016020810190610a239190610cd2565b905060608c8c86818110610a3357fe5b9050602002810190610a45919061136e565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505090508e8e86818110610a9657fe5b9050602002016020810190610aab9190610cd2565b73ffffffffffffffffffffffffffffffffffffffff166332ef8314858585856040518563ffffffff1660e01b8152600401610ae99493929190610f49565b600060405180830381600087803b158015610b0357600080fd5b505af1158015610b17573d6000803e3d6000fd5b505060019096019550610979945050505050565b8060005b85811015610c5357868682818110610b4357fe5b9050602002016020810190610b589190610cd2565b73ffffffffffffffffffffffffffffffffffffffff16637eace8928a8a84818110610b7f57fe5b9050602002016020810190610b949190610cd2565b8b8b85600101818110610ba357fe5b9050602002016020810190610bb89190610cd2565b85898987818110610bc557fe5b9050602002810190610bd7919061136e565b6040518663ffffffff1660e01b8152600401610bf7959493929190610f94565b602060405180830381600087803b158015610c1157600080fd5b505af1158015610c25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c499190610e76565b9150600101610b2f565b50979650505050505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610c8357600080fd5b92915050565b60008083601f840112610c9a578182fd5b50813567ffffffffffffffff811115610cb1578182fd5b6020830191508360208083028501011115610ccb57600080fd5b9250929050565b600060208284031215610ce3578081fd5b610ced8383610c5f565b9392505050565b60008060008060008060006080888a031215610d0e578283fd5b873567ffffffffffffffff80821115610d25578485fd5b610d318b838c01610c89565b909950975060208a0135915080821115610d49578485fd5b610d558b838c01610c89565b909750955060408a0135915080821115610d6d578485fd5b50610d7a8a828b01610c89565b989b979a50959894979596606090950135949350505050565b60008060008060008060008060008060e08b8d031215610db1578283fd5b8a3567ffffffffffffffff80821115610dc8578485fd5b610dd48e838f01610c89565b909c509a5060208d0135915080821115610dec578485fd5b610df88e838f01610c89565b909a50985060408d0135915080821115610e10578485fd5b50610e1d8d828e01610c89565b90975095505060608b0135935060808b01359250610e3e8c60a08d01610c5f565b915060c08b013590509295989b9194979a5092959850565b600060208284031215610e67578081fd5b81518015158114610ced578182fd5b600060208284031215610e87578081fd5b5051919050565b60008151808452815b81811015610eb357602081850181015186830182015201610e97565b81811115610ec45782602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b73ffffffffffffffffffffffffffffffffffffffff9384168152919092166020820152604081019190915260600190565b600073ffffffffffffffffffffffffffffffffffffffff8087168352808616602084015280851660408401525060806060830152610f8a6080830184610e8e565b9695505050505050565b600073ffffffffffffffffffffffffffffffffffffffff808816835280871660208401525084604083015260806060830152826080830152828460a084013781830160a090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0160101949350505050565b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525083604083015260806060830152610f8a6080830184610e8e565b73ffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b73ffffffffffffffffffffffffffffffffffffffff9390931683526020830191909152604082015260600190565b6020808252602a908201527f537761707061526f757465723a204d7573742068617665206174206c6561737460408201527f206f6e6520706169722100000000000000000000000000000000000000000000606082015260800190565b6020808252602a908201527f537761707061526f757465723a20496e697469616c207472616e73666572467260408201527f6f6d206661696c65642100000000000000000000000000000000000000000000606082015260800190565b60208082526032908201527f537761707061526f757465723a20496e73756666696369656e7420657870656360408201527f746564206f757470757420616d6f756e74210000000000000000000000000000606082015260800190565b60208082526024908201527f537761707061526f757465723a2046696e616c207472616e736665722066616960408201527f6c65642100000000000000000000000000000000000000000000000000000000606082015260800190565b60208082526016908201527f537761707061526f757465723a20457870697265642100000000000000000000604082015260600190565b60208082526028908201527f537761707061526f757465723a20506169727320616e6420457874726173206d60408201527f69736d6174636821000000000000000000000000000000000000000000000000606082015260800190565b60208082526026908201527f537761707061526f757465723a205061746820616e64205061697273206d697360408201527f6d61746368210000000000000000000000000000000000000000000000000000606082015260800190565b60208082526029908201527f537761707061526f757465723a20496e73756666696369656e74206f7574707560408201527f7420616d6f756e74210000000000000000000000000000000000000000000000606082015260800190565b90815260200190565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126113a2578283fd5b8084018035925067ffffffffffffffff8311156113bd578384fd5b60200192505036819003821315610ccb57600080fdfea264697066735822122021708253f669860d51e7d8737f8edb914985197756f9de57503f907adce56b1164736f6c63430006080033",
  "immutableReferences": {},
  "sourceMap": "209:5381:61:-:0;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;209:5381:61;;;;;;;",
  "deployedSourceMap": "209:5381:61:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;9;2:12;1089:1750:61;;5:9:-1;2:2;;;27:1;24;17:12;2:2;-1:-1;1089:1750:61;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;2845:2708;;5:9:-1;2:2;;;27:1;24;17:12;2:2;-1:-1;2845:2708:61;;;;;;;;:::i;582:501::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;-1:-1;582:501:61;;;;;;;;:::i;1089:1750::-;1377:20;1358:8;516:15;504:8;:27;;496:62;;;;-1:-1:-1;;;496:62:61;;;;;;;;;;;;;;;;;1460:1:::1;1445:16:::0;::::1;1430:31:::0;::::1;1409:116;;;;-1:-1:-1::0;;;1409:116:61::1;;;;;;;;;1556:29:::0;;::::1;1535:116;;;;-1:-1:-1::0;;;1535:116:61::1;;;;;;;;;1669:16:::0;1661:71:::1;;;;-1:-1:-1::0;;;1661:71:61::1;;;;;;;;;1770:4;;1775:1;1770:7;;;;;;;;;;;;;;;;;;;;;;1764:27;;;1792:10;1804:5;;1810:1;1804:8;;;;;;;;;;;;;;;;;;;;;;1814:11;1764:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;1764:62:61;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;1764:62:61;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;1764:62:61;;;;;;;;;1743:151;;;;-1:-1:-1::0;;;1743:151:61::1;;;;;;;;;1909:6;1904:325;1917:16:::0;;::::1;1904:325;;;1955:17;1974:18:::0;1997:4:::1;;2002:1;1997:7;;;;;;;;;;;;;;;;;;;;;;2006:4;;2011:1;2015;2011:5;2006:11;;;;;;;;;;;;;;;;;;;;;;1954:64:::0;;-1:-1:-1;1954:64:61;-1:-1:-1;2032:12:61::1;2051:16:::0;;;2047:20;::::1;:51;;2093:4;2047:51;;;2070:5;;2076:1;2080;2076:5;2070:12;;;;;;;;;;;;;;;;;;;;;;2032:66;;2112:17;2132:6;;2139:1;2132:9;;;;;;;;;;;;;;;;;;;;2112:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;2112:29:61;;;;;;;;2169:5;;2175:1;2169:8;;;;;;;;;;;;;;;;;;;;;;2155:28;;;2184:9;2195:10;2207:4;2213;2155:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;2155:63:61;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;-1:-1:::0;;1935:3:61::1;::::0;;::::1;::::0;-1:-1:-1;1904:325:61::1;::::0;-1:-1:-1;;;;;1904:325:61::1;;-1:-1:-1::0;2390:14:61::1;2407:4:::0;;2412:15;;;2407:21;;::::1;;;;;;;;;;;;;;;;;;;;2453:38;::::0;;;;2390;;-1:-1:-1;2453:23:61::1;::::0;::::1;::::0;::::1;::::0;:38:::1;::::0;2485:4:::1;::::0;2453:38:::1;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;2453:38:61;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;2453:38:61;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;2453:38:61;;;;;;;;;2438:53;;2538:15;2522:12;:31;;2501:119;;;;-1:-1:-1::0;;;2501:119:61::1;;;;;;;;;2651:40;::::0;;;;:22:::1;::::0;::::1;::::0;::::1;::::0;:40:::1;::::0;2674:2;;2678:12;;2651:40:::1;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;2651:40:61;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;2651:40:61;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;2651:40:61;;;;;;;;;2630:123;;;;-1:-1:-1::0;;;2630:123:61::1;;;;;;;;;2798:6;2768:64;;2789:4;;2794:1;2789:7;;;;;;;;;;;;;;;;;;;;;;2768:64;;2773:10;2768:64;;;2785:2;2806:11;2819:12;2768:64;;;;;;;;;;;;;;;;;568:1;1089:1750:::0;;;;;;;;;;;;;:::o;2845:2708::-;3145:20;3126:8;516:15;504:8;:27;;496:62;;;;-1:-1:-1;;;496:62:61;;;;;;;;;3228:1:::1;3213:16:::0;::::1;3198:31:::0;::::1;3177:116;;;;-1:-1:-1::0;;;3177:116:61::1;;;;;;;;;3324:29:::0;;::::1;3303:116;;;;-1:-1:-1::0;;;3303:116:61::1;;;;;;;;;3437:16:::0;3429:71:::1;;;;-1:-1:-1::0;;;3429:71:61::1;;;;;;;;;3816:11;3801:26;;3911:6;3906:377;3919:16:::0;;::::1;3906:377;;;3961:13;3976:14:::0;3995:4:::1;;4000:1;3995:7;;;;;;;;;;;;;;;;;;;;;;4004:4;;4009:1;4013;4009:5;4004:11;;;;;;;;;;;;;;;;;;;;;;3960:56;;;;4034:17;4054:6;;4061:1;4054:9;;;;;;;;;;;;;;;;;;;;4034:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;4034:29:61;;;;;;;;4110:5;;4116:1;4110:8;;;;;;;;;;;;;;;;;;;;;;4096:39;;;4157:5;4184:6;4212:12;4246:4;4096:172;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;4096:172:61;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;4096:172:61;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;4096:172:61;;;;;;;;;4081:187:::0;-1:-1:-1;;3937:3:61::1;::::0;;::::1;::::0;-1:-1:-1;3906:377:61::1;::::0;-1:-1:-1;3906:377:61::1;;;4337:15;4321:12;:31;;4296:140;;;;-1:-1:-1::0;;;4296:140:61::1;;;;;;;;;4484:4;;4489:1;4484:7;;;;;;;;;;;;;;;;;;;;;;4478:27;;;4506:10;4518:5;;4524:1;4518:8;;;;;;;;;;;;;;;;;;;;;;4528:11;4478:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;4478:62:61;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;4478:62:61;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;4478:62:61;;;;;;;;;4457:151;;;;-1:-1:-1::0;;;4457:151:61::1;;;;;;;;;4623:6;4618:325;4631:16:::0;;::::1;4618:325;;;4669:17;4688:18:::0;4711:4:::1;;4716:1;4711:7;;;;;;;;;;;;;;;;;;;;;;4720:4;;4725:1;4729;4725:5;4720:11;;;;;;;;;;;;;;;;;;;;;;4668:64:::0;;-1:-1:-1;4668:64:61;-1:-1:-1;4746:12:61::1;4765:16:::0;;;4761:20;::::1;:51;;4807:4;4761:51;;;4784:5;;4790:1;4794;4790:5;4784:12;;;;;;;;;;;;;;;;;;;;;;4746:66;;4826:17;4846:6;;4853:1;4846:9;;;;;;;;;;;;;;;;;;;;4826:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;4826:29:61;;;;;;;;4883:5;;4889:1;4883:8;;;;;;;;;;;;;;;;;;;;;;4869:28;;;4898:9;4909:10;4921:4;4927;4869:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;4869:63:61;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;-1:-1:::0;;4649:3:61::1;::::0;;::::1;::::0;-1:-1:-1;4618:325:61::1;::::0;-1:-1:-1;;;;;4618:325:61::1;582:501:::0;816:11;769:20;837:240;850:16;;;837:240;;;916:5;;922:1;916:8;;;;;;;;;;;;;;;;;;;;;;902:39;;;959:4;;964:1;959:7;;;;;;;;;;;;;;;;;;;;;;984:4;;989:1;993;989:5;984:11;;;;;;;;;;;;;;;;;;;;;;1013:12;1043:6;;1050:1;1043:9;;;;;;;;;;;;;;;;;;;;902:164;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;902:164:61;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;902:164:61;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;902:164:61;;;;;;;;;887:179;-1:-1:-1;868:3:61;;837:240;;;;582:501;;;;;;;;;:::o;5:130:-1:-;72:20;;17141:42;17130:54;;18249:35;;18239:2;;18298:1;;18288:12;18239:2;57:78;;;;;160:352;;;290:3;283:4;275:6;271:17;267:27;257:2;;-1:-1;;298:12;257:2;-1:-1;328:20;;368:18;357:30;;354:2;;;-1:-1;;390:12;354:2;434:4;426:6;422:17;410:29;;485:3;434:4;;469:6;465:17;426:6;451:32;;448:41;445:2;;;502:1;;492:12;445:2;250:262;;;;;;1320:241;;1424:2;1412:9;1403:7;1399:23;1395:32;1392:2;;;-1:-1;;1430:12;1392:2;1492:53;1537:7;1513:22;1492:53;;;1482:63;1386:175;-1:-1;;;1386:175;1568:1107;;;;;;;;1839:3;1827:9;1818:7;1814:23;1810:33;1807:2;;;-1:-1;;1846:12;1807:2;1904:17;1891:31;1942:18;;1934:6;1931:30;1928:2;;;-1:-1;;1964:12;1928:2;2002:80;2074:7;2065:6;2054:9;2050:22;2002:80;;;1992:90;;-1:-1;1992:90;-1:-1;2147:2;2132:18;;2119:32;;-1:-1;2160:30;;;2157:2;;;-1:-1;;2193:12;2157:2;2231:80;2303:7;2294:6;2283:9;2279:22;2231:80;;;2221:90;;-1:-1;2221:90;-1:-1;2376:2;2361:18;;2348:32;;-1:-1;2389:30;;;2386:2;;;-1:-1;;2422:12;2386:2;;2460:91;2543:7;2534:6;2523:9;2519:22;2460:91;;;1801:874;;;;-1:-1;1801:874;;;;;;2588:2;2627:22;;;1109:20;;1801:874;-1:-1;;;;1801:874;2682:1485;;;;;;;;;;;3004:3;2992:9;2983:7;2979:23;2975:33;2972:2;;;-1:-1;;3011:12;2972:2;3069:17;3056:31;3107:18;;3099:6;3096:30;3093:2;;;-1:-1;;3129:12;3093:2;3167:80;3239:7;3230:6;3219:9;3215:22;3167:80;;;3157:90;;-1:-1;3157:90;-1:-1;3312:2;3297:18;;3284:32;;-1:-1;3325:30;;;3322:2;;;-1:-1;;3358:12;3322:2;3396:80;3468:7;3459:6;3448:9;3444:22;3396:80;;;3386:90;;-1:-1;3386:90;-1:-1;3541:2;3526:18;;3513:32;;-1:-1;3554:30;;;3551:2;;;-1:-1;;3587:12;3551:2;;3625:91;3708:7;3699:6;3688:9;3684:22;3625:91;;;3615:101;;-1:-1;3615:101;-1:-1;;3753:2;3792:22;;1109:20;;-1:-1;3861:3;3901:22;;1109:20;;-1:-1;3989:53;4034:7;3970:3;4010:22;;3989:53;;;3979:63;;4079:3;4123:9;4119:22;1109:20;4088:63;;2966:1201;;;;;;;;;;;;;;4174:257;;4286:2;4274:9;4265:7;4261:23;4257:32;4254:2;;;-1:-1;;4292:12;4254:2;988:6;982:13;18395:5;17042:13;17035:21;18373:5;18370:32;18360:2;;-1:-1;;18406:12;4438:263;;4553:2;4541:9;4532:7;4528:23;4524:32;4521:2;;;-1:-1;;4559:12;4521:2;-1:-1;1257:13;;4515:186;-1:-1;4515:186;5305:343;;5447:5;16494:12;16650:6;16645:3;16638:19;-1:-1;17881:101;17895:6;17892:1;17889:13;17881:101;;;16687:4;17962:11;;;;;17956:18;17943:11;;;;;17936:39;17910:10;17881:101;;;17997:6;17994:1;17991:13;17988:2;;;-1:-1;16687:4;18053:6;16682:3;18044:16;;18037:27;17988:2;-1:-1;18173:2;18153:14;18169:7;18149:28;5604:39;;;;16687:4;5604:39;;5395:253;-1:-1;;5395:253;8817:238;17141:42;17130:54;;;;4787:58;;8952:2;8937:18;;8923:132;9062:460;17141:42;17130:54;;;4787:58;;17130:54;;;;9425:2;9410:18;;4928:37;9508:2;9493:18;;8768:37;;;;9253:2;9238:18;;9224:298;9529:640;;17141:42;;4958:5;17130:54;4935:3;4928:37;17141:42;4958:5;17130:54;9923:2;9912:9;9908:18;4928:37;17141:42;4958:5;17130:54;10006:2;9995:9;9991:18;4928:37;;9758:3;10043:2;10032:9;10028:18;10021:48;10083:76;9758:3;9747:9;9743:19;10145:6;10083:76;;;10075:84;9729:440;-1:-1;;;;;;9729:440;10176:660;;17141:42;;17134:5;17130:54;4935:3;4928:37;17141:42;17134:5;17130:54;10580:2;10569:9;10565:18;4928:37;;8798:5;10663:2;10652:9;10648:18;8768:37;10415:3;10700:2;10689:9;10685:18;10678:48;16650:6;10415:3;10404:9;10400:19;16638;17736:6;17731:3;16678:14;10404:9;16678:14;17713:30;17774:16;;;16678:14;17774:16;;;17767:27;;;;18173:2;18153:14;;;18169:7;18149:28;5252:39;;;10386:450;-1:-1;;;;10386:450;10843:640;;17141:42;;17134:5;17130:54;4935:3;4928:37;17141:42;17134:5;17130:54;11237:2;11226:9;11222:18;4928:37;;8798:5;11320:2;11309:9;11305:18;8768:37;11072:3;11357:2;11346:9;11342:18;11335:48;11397:76;11072:3;11061:9;11057:19;11459:6;11397:76;;11490:333;17141:42;17130:54;;;;4928:37;;11809:2;11794:18;;8768:37;11645:2;11630:18;;11616:207;11830:444;17141:42;17130:54;;;;4928:37;;12177:2;12162:18;;8768:37;;;;12260:2;12245:18;;8768:37;12013:2;11998:18;;11984:290;12281:416;12481:2;12495:47;;;5880:2;12466:18;;;16638:19;5916:34;16678:14;;;5896:55;5985:12;5971;;;5964:34;6017:12;;;12452:245;12704:416;12904:2;12918:47;;;6268:2;12889:18;;;16638:19;6304:34;16678:14;;;6284:55;6373:12;6359;;;6352:34;6405:12;;;12875:245;13127:416;13327:2;13341:47;;;6656:2;13312:18;;;16638:19;6692:34;16678:14;;;6672:55;6761:20;6747:12;;;6740:42;6801:12;;;13298:245;13550:416;13750:2;13764:47;;;7052:2;13735:18;;;16638:19;7088:34;16678:14;;;7068:55;7157:6;7143:12;;;7136:28;7183:12;;;13721:245;13973:416;14173:2;14187:47;;;7434:2;14158:18;;;16638:19;7470:24;16678:14;;;7450:45;7514:12;;;14144:245;14396:416;14596:2;14610:47;;;7765:2;14581:18;;;16638:19;7801:34;16678:14;;;7781:55;7870:10;7856:12;;;7849:32;7900:12;;;14567:245;14819:416;15019:2;15033:47;;;8151:2;15004:18;;;16638:19;8187:34;16678:14;;;8167:55;8256:8;8242:12;;;8235:30;8284:12;;;14990:245;15242:416;15442:2;15456:47;;;8535:2;15427:18;;;16638:19;8571:34;16678:14;;;8551:55;8640:11;8626:12;;;8619:33;8671:12;;;15413:245;15665:222;8768:37;;;15792:2;15777:18;;15763:124;15894:506;;;16029:11;16016:25;16080:48;16104:8;16088:14;16084:29;16080:48;16060:18;16056:73;16046:2;;-1:-1;;16133:12;16046:2;16174:18;16164:8;16160:33;16227:4;16214:18;16204:28;;16252:18;16244:6;16241:30;16238:2;;;-1:-1;;16274:12;16238:2;16119:4;16302:13;;-1:-1;;16088:14;16334:38;;;16324:49;;16321:2;;;16386:1;;16376:12",
  "source": "// SPDX-License-Identifier: MIT\npragma solidity 0.6.8;\npragma experimental ABIEncoderV2;\n\nimport \"@openzeppelin/contracts/token/ERC20/ERC20.sol\";\nimport \"./ISwappaPairV1.sol\";\nimport \"./ISwappaRouterV1.sol\";\n\ncontract SwappaRouterV1 is ISwappaRouterV1 {\n    event Swap(\n        address indexed sender,\n        address to,\n        address indexed input,\n        address indexed output,\n        uint256 inputAmount,\n        uint256 outputAmount\n    );\n\n    modifier ensure(uint deadline) {\n        require(deadline >= block.timestamp, \"SwappaRouter: Expired!\");\n        _;\n    }\n\n    function getOutputAmount(\n        address[] calldata path,\n        address[] calldata pairs,\n        bytes[] calldata extras,\n        uint256 inputAmount\n    ) external override returns (uint256 outputAmount) {\n        outputAmount = inputAmount;\n        for (uint i; i < pairs.length; i++) {\n            outputAmount = ISwappaPairV1(pairs[i]).getOutputAmount(\n                path[i],\n                path[i + 1],\n                outputAmount,\n                extras[i]\n            );\n        }\n    }\n\n    function swapExactInputForOutput(\n        address[] calldata path,\n        address[] calldata pairs,\n        bytes[] calldata extras,\n        uint256 inputAmount,\n        uint256 minOutputAmount,\n        address to,\n        uint deadline\n    ) external override ensure(deadline) returns (uint256 outputAmount) {\n        require(\n            path.length == pairs.length + 1,\n            \"SwappaRouter: Path and Pairs mismatch!\"\n        );\n        require(\n            pairs.length == extras.length,\n            \"SwappaRouter: Pairs and Extras mismatch!\"\n        );\n        require(pairs.length > 0, \"SwappaRouter: Must have at least one pair!\");\n\n        require(\n            ERC20(path[0]).transferFrom(msg.sender, pairs[0], inputAmount),\n            \"SwappaRouter: Initial transferFrom failed!\"\n        );\n        for (uint i; i < pairs.length; i++) {\n            (address pairInput, address pairOutput) = (path[i], path[i + 1]);\n            address next = i < pairs.length - 1 ? pairs[i + 1] : address(this);\n            bytes memory data = extras[i];\n            ISwappaPairV1(pairs[i]).swap(pairInput, pairOutput, next, data);\n        }\n        // Perform final output check in the router as a final safeguard to make sure\n        // minOutputAmount restriction is honored no matter what.\n        address output = path[path.length - 1];\n        outputAmount = ERC20(output).balanceOf(address(this));\n        require(\n            outputAmount >= minOutputAmount,\n            \"SwappaRouter: Insufficient output amount!\"\n        );\n        require(\n            ERC20(output).transfer(to, outputAmount),\n            \"SwappaRouter: Final transfer failed!\"\n        );\n        emit Swap(msg.sender, to, path[0], output, inputAmount, outputAmount);\n    }\n\n    function swapExactInputForOutputWithPrecheck(\n        address[] calldata path,\n        address[] calldata pairs,\n        bytes[] calldata extras,\n        uint256 inputAmount,\n        uint256 minOutputAmount,\n        address to,\n        uint deadline\n    ) external override ensure(deadline) returns (uint256 outputAmount) {\n        require(\n            path.length == pairs.length + 1,\n            \"SwappaRouter: Path and Pairs mismatch!\"\n        );\n        require(\n            pairs.length == extras.length,\n            \"SwappaRouter: Pairs and Extras mismatch!\"\n        );\n        require(pairs.length > 0, \"SwappaRouter: Must have at least one pair!\");\n\n        // Note(zviadm): Full code copying is necessary because `bytes[]` arrays can not easily be\n        // passed around between `calldata` and `memory` locations. Manual copying would be necessary\n        // with quite a bit of annoying code to work around stack issues.\n\n        {\n            outputAmount = inputAmount; // reuse outputAmount variable to avoid \"stack too deep\" errors.\n            for (uint i; i < pairs.length; i++) {\n                (address input, address output) = (path[i], path[i + 1]);\n                bytes memory data = extras[i];\n                outputAmount = ISwappaPairV1(pairs[i]).getOutputAmount(\n                    input,\n                    output,\n                    outputAmount,\n                    data\n                );\n            }\n            require(\n                outputAmount >= minOutputAmount,\n                \"SwappaRouter: Insufficient expected output amount!\"\n            );\n        }\n\n        require(\n            ERC20(path[0]).transferFrom(msg.sender, pairs[0], inputAmount),\n            \"SwappaRouter: Initial transferFrom failed!\"\n        );\n        for (uint i; i < pairs.length; i++) {\n            (address pairInput, address pairOutput) = (path[i], path[i + 1]);\n            address next = i < pairs.length - 1 ? pairs[i + 1] : address(this);\n            bytes memory data = extras[i];\n            ISwappaPairV1(pairs[i]).swap(pairInput, pairOutput, next, data);\n        }\n        // Perform final output check in the router as a final safeguard to make sure\n        // minOutputAmount restriction is honored no matter what.\n        address output = path[path.length - 1];\n        outputAmount = ERC20(output).balanceOf(address(this));\n        require(\n            outputAmount >= minOutputAmount,\n            \"SwappaRouter: Insufficient output amount!\"\n        );\n        require(\n            ERC20(output).transfer(to, outputAmount),\n            \"SwappaRouter: Final transfer failed!\"\n        );\n        emit Swap(msg.sender, to, path[0], output, inputAmount, outputAmount);\n    }\n\n    receive() external payable {}\n}\n",
  "sourcePath": "/home/thezviad_gmail_com/src/swappa/contracts/swappa/SwappaRouterV1.sol",
  "ast": {
    "absolutePath": "project:/contracts/swappa/SwappaRouterV1.sol",
    "exportedSymbols": {
      "SwappaRouterV1": [
        8571
      ]
    },
    "id": 8572,
    "license": "MIT",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 8046,
        "literals": [
          "solidity",
          "0.6",
          ".8"
        ],
        "nodeType": "PragmaDirective",
        "src": "32:22:61"
      },
      {
        "id": 8047,
        "literals": [
          "experimental",
          "ABIEncoderV2"
        ],
        "nodeType": "PragmaDirective",
        "src": "55:33:61"
      },
      {
        "absolutePath": "@openzeppelin/contracts/token/ERC20/ERC20.sol",
        "file": "@openzeppelin/contracts/token/ERC20/ERC20.sol",
        "id": 8048,
        "nodeType": "ImportDirective",
        "scope": 8572,
        "sourceUnit": 726,
        "src": "90:55:61",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "project:/contracts/swappa/ISwappaPairV1.sol",
        "file": "./ISwappaPairV1.sol",
        "id": 8049,
        "nodeType": "ImportDirective",
        "scope": 8572,
        "sourceUnit": 5326,
        "src": "146:29:61",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "project:/contracts/swappa/ISwappaRouterV1.sol",
        "file": "./ISwappaRouterV1.sol",
        "id": 8050,
        "nodeType": "ImportDirective",
        "scope": 8572,
        "sourceUnit": 5390,
        "src": "176:31:61",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 8051,
              "name": "ISwappaRouterV1",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 5389,
              "src": "236:15:61",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ISwappaRouterV1_$5389",
                "typeString": "contract ISwappaRouterV1"
              }
            },
            "id": 8052,
            "nodeType": "InheritanceSpecifier",
            "src": "236:15:61"
          }
        ],
        "contractDependencies": [
          5389
        ],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 8571,
        "linearizedBaseContracts": [
          8571,
          5389
        ],
        "name": "SwappaRouterV1",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "anonymous": false,
            "documentation": null,
            "id": 8066,
            "name": "Swap",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 8065,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8054,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "sender",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 8066,
                  "src": "278:22:61",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8053,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "278:7:61",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8056,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "to",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 8066,
                  "src": "310:10:61",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8055,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "310:7:61",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8058,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "input",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 8066,
                  "src": "330:21:61",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8057,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "330:7:61",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8060,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "output",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 8066,
                  "src": "361:22:61",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8059,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "361:7:61",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8062,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "inputAmount",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 8066,
                  "src": "393:19:61",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8061,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "393:7:61",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8064,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "outputAmount",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 8066,
                  "src": "422:20:61",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8063,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "422:7:61",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "268:180:61"
            },
            "src": "258:191:61"
          },
          {
            "body": {
              "id": 8079,
              "nodeType": "Block",
              "src": "486:90:61",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 8074,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 8071,
                          "name": "deadline",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8068,
                          "src": "504:8:61",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 8072,
                            "name": "block",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -4,
                            "src": "516:5:61",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_block",
                              "typeString": "block"
                            }
                          },
                          "id": 8073,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "timestamp",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "516:15:61",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "504:27:61",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "537761707061526f757465723a204578706972656421",
                        "id": 8075,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "533:24:61",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_9ed8592ea2f5619ebcb3e301962e66ed8fe7649ccf8e6d5cbf672aa0763f3846",
                          "typeString": "literal_string \"SwappaRouter: Expired!\""
                        },
                        "value": "SwappaRouter: Expired!"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_9ed8592ea2f5619ebcb3e301962e66ed8fe7649ccf8e6d5cbf672aa0763f3846",
                          "typeString": "literal_string \"SwappaRouter: Expired!\""
                        }
                      ],
                      "id": 8070,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "496:7:61",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 8076,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "496:62:61",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8077,
                  "nodeType": "ExpressionStatement",
                  "src": "496:62:61"
                },
                {
                  "id": 8078,
                  "nodeType": "PlaceholderStatement",
                  "src": "568:1:61"
                }
              ]
            },
            "documentation": null,
            "id": 8080,
            "name": "ensure",
            "nodeType": "ModifierDefinition",
            "overrides": null,
            "parameters": {
              "id": 8069,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8068,
                  "mutability": "mutable",
                  "name": "deadline",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 8080,
                  "src": "471:13:61",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8067,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "471:4:61",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "470:15:61"
            },
            "src": "455:121:61",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "baseFunctions": [
              5344
            ],
            "body": {
              "id": 8135,
              "nodeType": "Block",
              "src": "791:292:61",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8099,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 8097,
                      "name": "outputAmount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8095,
                      "src": "801:12:61",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 8098,
                      "name": "inputAmount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8091,
                      "src": "816:11:61",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "801:26:61",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 8100,
                  "nodeType": "ExpressionStatement",
                  "src": "801:26:61"
                },
                {
                  "body": {
                    "id": 8133,
                    "nodeType": "Block",
                    "src": "873:204:61",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 8131,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 8111,
                            "name": "outputAmount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8095,
                            "src": "887:12:61",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "id": 8118,
                                  "name": "path",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8083,
                                  "src": "959:4:61",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                    "typeString": "address[] calldata"
                                  }
                                },
                                "id": 8120,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "id": 8119,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8102,
                                  "src": "964:1:61",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "959:7:61",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "id": 8121,
                                  "name": "path",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8083,
                                  "src": "984:4:61",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                    "typeString": "address[] calldata"
                                  }
                                },
                                "id": 8125,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 8124,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "id": 8122,
                                    "name": "i",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8102,
                                    "src": "989:1:61",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "+",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "hexValue": "31",
                                    "id": 8123,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "993:1:61",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_1_by_1",
                                      "typeString": "int_const 1"
                                    },
                                    "value": "1"
                                  },
                                  "src": "989:5:61",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "984:11:61",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 8126,
                                "name": "outputAmount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8095,
                                "src": "1013:12:61",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "id": 8127,
                                  "name": "extras",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8089,
                                  "src": "1043:6:61",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr",
                                    "typeString": "bytes calldata[] calldata"
                                  }
                                },
                                "id": 8129,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "id": 8128,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8102,
                                  "src": "1050:1:61",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "1043:9:61",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_calldata_ptr",
                                  "typeString": "bytes calldata"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_bytes_calldata_ptr",
                                  "typeString": "bytes calldata"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "baseExpression": {
                                      "argumentTypes": null,
                                      "id": 8113,
                                      "name": "pairs",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 8086,
                                      "src": "916:5:61",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                        "typeString": "address[] calldata"
                                      }
                                    },
                                    "id": 8115,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "id": 8114,
                                      "name": "i",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 8102,
                                      "src": "922:1:61",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "916:8:61",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "id": 8112,
                                  "name": "ISwappaPairV1",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5325,
                                  "src": "902:13:61",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_ISwappaPairV1_$5325_$",
                                    "typeString": "type(contract ISwappaPairV1)"
                                  }
                                },
                                "id": 8116,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "902:23:61",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_ISwappaPairV1_$5325",
                                  "typeString": "contract ISwappaPairV1"
                                }
                              },
                              "id": 8117,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "getOutputAmount",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 5324,
                              "src": "902:39:61",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$_t_uint256_$",
                                "typeString": "function (address,address,uint256,bytes memory) external returns (uint256)"
                              }
                            },
                            "id": 8130,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "902:164:61",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "887:179:61",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 8132,
                        "nodeType": "ExpressionStatement",
                        "src": "887:179:61"
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 8107,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 8104,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8102,
                      "src": "850:1:61",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 8105,
                        "name": "pairs",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8086,
                        "src": "854:5:61",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                          "typeString": "address[] calldata"
                        }
                      },
                      "id": 8106,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "854:12:61",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "850:16:61",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 8134,
                  "initializationExpression": {
                    "assignments": [
                      8102
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 8102,
                        "mutability": "mutable",
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 8134,
                        "src": "842:6:61",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 8101,
                          "name": "uint",
                          "nodeType": "ElementaryTypeName",
                          "src": "842:4:61",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 8103,
                    "initialValue": null,
                    "nodeType": "VariableDeclarationStatement",
                    "src": "842:6:61"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 8109,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "868:3:61",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 8108,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8102,
                        "src": "868:1:61",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 8110,
                    "nodeType": "ExpressionStatement",
                    "src": "868:3:61"
                  },
                  "nodeType": "ForStatement",
                  "src": "837:240:61"
                }
              ]
            },
            "documentation": null,
            "functionSelector": "e2f46a00",
            "id": 8136,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getOutputAmount",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 8093,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "751:8:61"
            },
            "parameters": {
              "id": 8092,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8083,
                  "mutability": "mutable",
                  "name": "path",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 8136,
                  "src": "616:23:61",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 8081,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "616:7:61",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 8082,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "616:9:61",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8086,
                  "mutability": "mutable",
                  "name": "pairs",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 8136,
                  "src": "649:24:61",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 8084,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "649:7:61",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 8085,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "649:9:61",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8089,
                  "mutability": "mutable",
                  "name": "extras",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 8136,
                  "src": "683:23:61",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr",
                    "typeString": "bytes[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 8087,
                      "name": "bytes",
                      "nodeType": "ElementaryTypeName",
                      "src": "683:5:61",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_storage_ptr",
                        "typeString": "bytes"
                      }
                    },
                    "id": 8088,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "683:7:61",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes_storage_$dyn_storage_ptr",
                      "typeString": "bytes[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8091,
                  "mutability": "mutable",
                  "name": "inputAmount",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 8136,
                  "src": "716:19:61",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8090,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "716:7:61",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "606:135:61"
            },
            "returnParameters": {
              "id": 8096,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8095,
                  "mutability": "mutable",
                  "name": "outputAmount",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 8136,
                  "src": "769:20:61",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8094,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "769:7:61",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "768:22:61"
            },
            "scope": 8571,
            "src": "582:501:61",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              5366
            ],
            "body": {
              "id": 8321,
              "nodeType": "Block",
              "src": "1399:1440:61",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 8169,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 8163,
                            "name": "path",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8139,
                            "src": "1430:4:61",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                              "typeString": "address[] calldata"
                            }
                          },
                          "id": 8164,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "1430:11:61",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 8168,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 8165,
                              "name": "pairs",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8142,
                              "src": "1445:5:61",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                "typeString": "address[] calldata"
                              }
                            },
                            "id": 8166,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "1445:12:61",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "+",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "31",
                            "id": 8167,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1460:1:61",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          },
                          "src": "1445:16:61",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "1430:31:61",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "537761707061526f757465723a205061746820616e64205061697273206d69736d6174636821",
                        "id": 8170,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1475:40:61",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_cbc4675579917e5fda45a353d444f0d37d533038808e91996b46a0da5ca80931",
                          "typeString": "literal_string \"SwappaRouter: Path and Pairs mismatch!\""
                        },
                        "value": "SwappaRouter: Path and Pairs mismatch!"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_cbc4675579917e5fda45a353d444f0d37d533038808e91996b46a0da5ca80931",
                          "typeString": "literal_string \"SwappaRouter: Path and Pairs mismatch!\""
                        }
                      ],
                      "id": 8162,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "1409:7:61",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 8171,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1409:116:61",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8172,
                  "nodeType": "ExpressionStatement",
                  "src": "1409:116:61"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 8178,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 8174,
                            "name": "pairs",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8142,
                            "src": "1556:5:61",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                              "typeString": "address[] calldata"
                            }
                          },
                          "id": 8175,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "1556:12:61",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 8176,
                            "name": "extras",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8145,
                            "src": "1572:6:61",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr",
                              "typeString": "bytes calldata[] calldata"
                            }
                          },
                          "id": 8177,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "1572:13:61",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "1556:29:61",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "537761707061526f757465723a20506169727320616e6420457874726173206d69736d6174636821",
                        "id": 8179,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1599:42:61",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_aa79a2f1b8ccadf65acf1e8a1304938ec50b5c0614873c30a77bee5848d93d9a",
                          "typeString": "literal_string \"SwappaRouter: Pairs and Extras mismatch!\""
                        },
                        "value": "SwappaRouter: Pairs and Extras mismatch!"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_aa79a2f1b8ccadf65acf1e8a1304938ec50b5c0614873c30a77bee5848d93d9a",
                          "typeString": "literal_string \"SwappaRouter: Pairs and Extras mismatch!\""
                        }
                      ],
                      "id": 8173,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "1535:7:61",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 8180,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1535:116:61",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8181,
                  "nodeType": "ExpressionStatement",
                  "src": "1535:116:61"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 8186,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 8183,
                            "name": "pairs",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8142,
                            "src": "1669:5:61",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                              "typeString": "address[] calldata"
                            }
                          },
                          "id": 8184,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "1669:12:61",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 8185,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "1684:1:61",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "1669:16:61",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "537761707061526f757465723a204d7573742068617665206174206c65617374206f6e65207061697221",
                        "id": 8187,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1687:44:61",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_50f8820bfeecb849a00cbe9e7b54a6b373cb7c22aa55809a32600c36edb64fa6",
                          "typeString": "literal_string \"SwappaRouter: Must have at least one pair!\""
                        },
                        "value": "SwappaRouter: Must have at least one pair!"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_50f8820bfeecb849a00cbe9e7b54a6b373cb7c22aa55809a32600c36edb64fa6",
                          "typeString": "literal_string \"SwappaRouter: Must have at least one pair!\""
                        }
                      ],
                      "id": 8182,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "1661:7:61",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 8188,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1661:71:61",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8189,
                  "nodeType": "ExpressionStatement",
                  "src": "1661:71:61"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 8197,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -15,
                              "src": "1792:3:61",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 8198,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "1792:10:61",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 8199,
                              "name": "pairs",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8142,
                              "src": "1804:5:61",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                "typeString": "address[] calldata"
                              }
                            },
                            "id": 8201,
                            "indexExpression": {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 8200,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1810:1:61",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "1804:8:61",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 8202,
                            "name": "inputAmount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8147,
                            "src": "1814:11:61",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "id": 8192,
                                  "name": "path",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8139,
                                  "src": "1770:4:61",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                    "typeString": "address[] calldata"
                                  }
                                },
                                "id": 8194,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "hexValue": "30",
                                  "id": 8193,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "1775:1:61",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                },
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "1770:7:61",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 8191,
                              "name": "ERC20",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 725,
                              "src": "1764:5:61",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_ERC20_$725_$",
                                "typeString": "type(contract ERC20)"
                              }
                            },
                            "id": 8195,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1764:14:61",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ERC20_$725",
                              "typeString": "contract ERC20"
                            }
                          },
                          "id": 8196,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "transferFrom",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 423,
                          "src": "1764:27:61",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$",
                            "typeString": "function (address,address,uint256) external returns (bool)"
                          }
                        },
                        "id": 8203,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1764:62:61",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "537761707061526f757465723a20496e697469616c207472616e7366657246726f6d206661696c656421",
                        "id": 8204,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1840:44:61",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_5d4db394429342c290de88dc1012d1383b0e08cbeb120c2513f7aad8def9fc3d",
                          "typeString": "literal_string \"SwappaRouter: Initial transferFrom failed!\""
                        },
                        "value": "SwappaRouter: Initial transferFrom failed!"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_5d4db394429342c290de88dc1012d1383b0e08cbeb120c2513f7aad8def9fc3d",
                          "typeString": "literal_string \"SwappaRouter: Initial transferFrom failed!\""
                        }
                      ],
                      "id": 8190,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "1743:7:61",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 8205,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1743:151:61",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8206,
                  "nodeType": "ExpressionStatement",
                  "src": "1743:151:61"
                },
                {
                  "body": {
                    "id": 8268,
                    "nodeType": "Block",
                    "src": "1940:289:61",
                    "statements": [
                      {
                        "assignments": [
                          8218,
                          8220
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 8218,
                            "mutability": "mutable",
                            "name": "pairInput",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 8268,
                            "src": "1955:17:61",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "typeName": {
                              "id": 8217,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "1955:7:61",
                              "stateMutability": "nonpayable",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          },
                          {
                            "constant": false,
                            "id": 8220,
                            "mutability": "mutable",
                            "name": "pairOutput",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 8268,
                            "src": "1974:18:61",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "typeName": {
                              "id": 8219,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "1974:7:61",
                              "stateMutability": "nonpayable",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 8230,
                        "initialValue": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 8221,
                                "name": "path",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8139,
                                "src": "1997:4:61",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                  "typeString": "address[] calldata"
                                }
                              },
                              "id": 8223,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 8222,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8208,
                                "src": "2002:1:61",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "1997:7:61",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 8224,
                                "name": "path",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8139,
                                "src": "2006:4:61",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                  "typeString": "address[] calldata"
                                }
                              },
                              "id": 8228,
                              "indexExpression": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 8227,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "id": 8225,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8208,
                                  "src": "2011:1:61",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "+",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "hexValue": "31",
                                  "id": 8226,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "2015:1:61",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_1_by_1",
                                    "typeString": "int_const 1"
                                  },
                                  "value": "1"
                                },
                                "src": "2011:5:61",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "2006:11:61",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "id": 8229,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "1996:22:61",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_address_$_t_address_$",
                            "typeString": "tuple(address,address)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "1954:64:61"
                      },
                      {
                        "assignments": [
                          8232
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 8232,
                            "mutability": "mutable",
                            "name": "next",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 8268,
                            "src": "2032:12:61",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "typeName": {
                              "id": 8231,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "2032:7:61",
                              "stateMutability": "nonpayable",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 8249,
                        "initialValue": {
                          "argumentTypes": null,
                          "condition": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 8238,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "id": 8233,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8208,
                              "src": "2047:1:61",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "<",
                            "rightExpression": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 8237,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 8234,
                                  "name": "pairs",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8142,
                                  "src": "2051:5:61",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                    "typeString": "address[] calldata"
                                  }
                                },
                                "id": 8235,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "length",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "2051:12:61",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "-",
                              "rightExpression": {
                                "argumentTypes": null,
                                "hexValue": "31",
                                "id": 8236,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "2066:1:61",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_1_by_1",
                                  "typeString": "int_const 1"
                                },
                                "value": "1"
                              },
                              "src": "2051:16:61",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "2047:20:61",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "falseExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 8246,
                                "name": "this",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -28,
                                "src": "2093:4:61",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_SwappaRouterV1_$8571",
                                  "typeString": "contract SwappaRouterV1"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_SwappaRouterV1_$8571",
                                  "typeString": "contract SwappaRouterV1"
                                }
                              ],
                              "id": 8245,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "2085:7:61",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 8244,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "2085:7:61",
                                "typeDescriptions": {
                                  "typeIdentifier": null,
                                  "typeString": null
                                }
                              }
                            },
                            "id": 8247,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2085:13:61",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          "id": 8248,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "Conditional",
                          "src": "2047:51:61",
                          "trueExpression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 8239,
                              "name": "pairs",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8142,
                              "src": "2070:5:61",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                "typeString": "address[] calldata"
                              }
                            },
                            "id": 8243,
                            "indexExpression": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 8242,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 8240,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8208,
                                "src": "2076:1:61",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "+",
                              "rightExpression": {
                                "argumentTypes": null,
                                "hexValue": "31",
                                "id": 8241,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "2080:1:61",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_1_by_1",
                                  "typeString": "int_const 1"
                                },
                                "value": "1"
                              },
                              "src": "2076:5:61",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "2070:12:61",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "2032:66:61"
                      },
                      {
                        "assignments": [
                          8251
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 8251,
                            "mutability": "mutable",
                            "name": "data",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 8268,
                            "src": "2112:17:61",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes"
                            },
                            "typeName": {
                              "id": 8250,
                              "name": "bytes",
                              "nodeType": "ElementaryTypeName",
                              "src": "2112:5:61",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_storage_ptr",
                                "typeString": "bytes"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 8255,
                        "initialValue": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 8252,
                            "name": "extras",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8145,
                            "src": "2132:6:61",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr",
                              "typeString": "bytes calldata[] calldata"
                            }
                          },
                          "id": 8254,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 8253,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8208,
                            "src": "2139:1:61",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "2132:9:61",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_calldata_ptr",
                            "typeString": "bytes calldata"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "2112:29:61"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 8262,
                              "name": "pairInput",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8218,
                              "src": "2184:9:61",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 8263,
                              "name": "pairOutput",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8220,
                              "src": "2195:10:61",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 8264,
                              "name": "next",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8232,
                              "src": "2207:4:61",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 8265,
                              "name": "data",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8251,
                              "src": "2213:4:61",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 8257,
                                    "name": "pairs",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8142,
                                    "src": "2169:5:61",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                      "typeString": "address[] calldata"
                                    }
                                  },
                                  "id": 8259,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "id": 8258,
                                    "name": "i",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8208,
                                    "src": "2175:1:61",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "2169:8:61",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 8256,
                                "name": "ISwappaPairV1",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5325,
                                "src": "2155:13:61",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_ISwappaPairV1_$5325_$",
                                  "typeString": "type(contract ISwappaPairV1)"
                                }
                              },
                              "id": 8260,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "2155:23:61",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ISwappaPairV1_$5325",
                                "typeString": "contract ISwappaPairV1"
                              }
                            },
                            "id": 8261,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "swap",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 5311,
                            "src": "2155:28:61",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_address_$_t_bytes_memory_ptr_$returns$__$",
                              "typeString": "function (address,address,address,bytes memory) external"
                            }
                          },
                          "id": 8266,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2155:63:61",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 8267,
                        "nodeType": "ExpressionStatement",
                        "src": "2155:63:61"
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 8213,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 8210,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8208,
                      "src": "1917:1:61",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 8211,
                        "name": "pairs",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8142,
                        "src": "1921:5:61",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                          "typeString": "address[] calldata"
                        }
                      },
                      "id": 8212,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "1921:12:61",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "1917:16:61",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 8269,
                  "initializationExpression": {
                    "assignments": [
                      8208
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 8208,
                        "mutability": "mutable",
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 8269,
                        "src": "1909:6:61",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 8207,
                          "name": "uint",
                          "nodeType": "ElementaryTypeName",
                          "src": "1909:4:61",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 8209,
                    "initialValue": null,
                    "nodeType": "VariableDeclarationStatement",
                    "src": "1909:6:61"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 8215,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "1935:3:61",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 8214,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8208,
                        "src": "1935:1:61",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 8216,
                    "nodeType": "ExpressionStatement",
                    "src": "1935:3:61"
                  },
                  "nodeType": "ForStatement",
                  "src": "1904:325:61"
                },
                {
                  "assignments": [
                    8271
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8271,
                      "mutability": "mutable",
                      "name": "output",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 8321,
                      "src": "2390:14:61",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 8270,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "2390:7:61",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8278,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 8272,
                      "name": "path",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8139,
                      "src": "2407:4:61",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                        "typeString": "address[] calldata"
                      }
                    },
                    "id": 8277,
                    "indexExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 8276,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8273,
                          "name": "path",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8139,
                          "src": "2412:4:61",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                            "typeString": "address[] calldata"
                          }
                        },
                        "id": 8274,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "length",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "2412:11:61",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "-",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "31",
                        "id": 8275,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2426:1:61",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        "value": "1"
                      },
                      "src": "2412:15:61",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "2407:21:61",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2390:38:61"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8289,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 8279,
                      "name": "outputAmount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8160,
                      "src": "2438:12:61",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 8286,
                              "name": "this",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -28,
                              "src": "2485:4:61",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_SwappaRouterV1_$8571",
                                "typeString": "contract SwappaRouterV1"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_SwappaRouterV1_$8571",
                                "typeString": "contract SwappaRouterV1"
                              }
                            ],
                            "id": 8285,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "2477:7:61",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 8284,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "2477:7:61",
                              "typeDescriptions": {
                                "typeIdentifier": null,
                                "typeString": null
                              }
                            }
                          },
                          "id": 8287,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2477:13:61",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 8281,
                              "name": "output",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8271,
                              "src": "2459:6:61",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 8280,
                            "name": "ERC20",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 725,
                            "src": "2453:5:61",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_ERC20_$725_$",
                              "typeString": "type(contract ERC20)"
                            }
                          },
                          "id": 8282,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2453:13:61",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_ERC20_$725",
                            "typeString": "contract ERC20"
                          }
                        },
                        "id": 8283,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "balanceOf",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 325,
                        "src": "2453:23:61",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                          "typeString": "function (address) view external returns (uint256)"
                        }
                      },
                      "id": 8288,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2453:38:61",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2438:53:61",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 8290,
                  "nodeType": "ExpressionStatement",
                  "src": "2438:53:61"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 8294,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 8292,
                          "name": "outputAmount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8160,
                          "src": "2522:12:61",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 8293,
                          "name": "minOutputAmount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8149,
                          "src": "2538:15:61",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "2522:31:61",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "537761707061526f757465723a20496e73756666696369656e74206f757470757420616d6f756e7421",
                        "id": 8295,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2567:43:61",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_cefd04d9f158c54476d457b22a80719a9743d5a6e0418466da4fa21996dd4acf",
                          "typeString": "literal_string \"SwappaRouter: Insufficient output amount!\""
                        },
                        "value": "SwappaRouter: Insufficient output amount!"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_cefd04d9f158c54476d457b22a80719a9743d5a6e0418466da4fa21996dd4acf",
                          "typeString": "literal_string \"SwappaRouter: Insufficient output amount!\""
                        }
                      ],
                      "id": 8291,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "2501:7:61",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 8296,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2501:119:61",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8297,
                  "nodeType": "ExpressionStatement",
                  "src": "2501:119:61"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 8303,
                            "name": "to",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8151,
                            "src": "2674:2:61",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 8304,
                            "name": "outputAmount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8160,
                            "src": "2678:12:61",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 8300,
                                "name": "output",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8271,
                                "src": "2657:6:61",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 8299,
                              "name": "ERC20",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 725,
                              "src": "2651:5:61",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_ERC20_$725_$",
                                "typeString": "type(contract ERC20)"
                              }
                            },
                            "id": 8301,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2651:13:61",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ERC20_$725",
                              "typeString": "contract ERC20"
                            }
                          },
                          "id": 8302,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "transfer",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 346,
                          "src": "2651:22:61",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                            "typeString": "function (address,uint256) external returns (bool)"
                          }
                        },
                        "id": 8305,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2651:40:61",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "537761707061526f757465723a2046696e616c207472616e73666572206661696c656421",
                        "id": 8306,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2705:38:61",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_9adfc36c8bf82468d0028ce6cfdb8f1360397ed2f3915c2f2b40899f5aface4f",
                          "typeString": "literal_string \"SwappaRouter: Final transfer failed!\""
                        },
                        "value": "SwappaRouter: Final transfer failed!"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_9adfc36c8bf82468d0028ce6cfdb8f1360397ed2f3915c2f2b40899f5aface4f",
                          "typeString": "literal_string \"SwappaRouter: Final transfer failed!\""
                        }
                      ],
                      "id": 8298,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "2630:7:61",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 8307,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2630:123:61",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8308,
                  "nodeType": "ExpressionStatement",
                  "src": "2630:123:61"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8310,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "2773:3:61",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 8311,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "2773:10:61",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8312,
                        "name": "to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8151,
                        "src": "2785:2:61",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 8313,
                          "name": "path",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8139,
                          "src": "2789:4:61",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                            "typeString": "address[] calldata"
                          }
                        },
                        "id": 8315,
                        "indexExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 8314,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "2794:1:61",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "2789:7:61",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8316,
                        "name": "output",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8271,
                        "src": "2798:6:61",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8317,
                        "name": "inputAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8147,
                        "src": "2806:11:61",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8318,
                        "name": "outputAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8160,
                        "src": "2819:12:61",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 8309,
                      "name": "Swap",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8066,
                      "src": "2768:4:61",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,address,address,uint256,uint256)"
                      }
                    },
                    "id": 8319,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2768:64:61",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8320,
                  "nodeType": "EmitStatement",
                  "src": "2763:69:61"
                }
              ]
            },
            "documentation": null,
            "functionSelector": "0862d12f",
            "id": 8322,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 8157,
                    "name": "deadline",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8153,
                    "src": "1358:8:61",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                ],
                "id": 8158,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8156,
                  "name": "ensure",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 8080,
                  "src": "1351:6:61",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_uint256_$",
                    "typeString": "modifier (uint256)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1351:16:61"
              }
            ],
            "name": "swapExactInputForOutput",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 8155,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "1342:8:61"
            },
            "parameters": {
              "id": 8154,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8139,
                  "mutability": "mutable",
                  "name": "path",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 8322,
                  "src": "1131:23:61",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 8137,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "1131:7:61",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 8138,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "1131:9:61",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8142,
                  "mutability": "mutable",
                  "name": "pairs",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 8322,
                  "src": "1164:24:61",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 8140,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "1164:7:61",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 8141,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "1164:9:61",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8145,
                  "mutability": "mutable",
                  "name": "extras",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 8322,
                  "src": "1198:23:61",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr",
                    "typeString": "bytes[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 8143,
                      "name": "bytes",
                      "nodeType": "ElementaryTypeName",
                      "src": "1198:5:61",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_storage_ptr",
                        "typeString": "bytes"
                      }
                    },
                    "id": 8144,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "1198:7:61",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes_storage_$dyn_storage_ptr",
                      "typeString": "bytes[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8147,
                  "mutability": "mutable",
                  "name": "inputAmount",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 8322,
                  "src": "1231:19:61",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8146,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1231:7:61",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8149,
                  "mutability": "mutable",
                  "name": "minOutputAmount",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 8322,
                  "src": "1260:23:61",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8148,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1260:7:61",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8151,
                  "mutability": "mutable",
                  "name": "to",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 8322,
                  "src": "1293:10:61",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8150,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1293:7:61",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8153,
                  "mutability": "mutable",
                  "name": "deadline",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 8322,
                  "src": "1313:13:61",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8152,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "1313:4:61",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1121:211:61"
            },
            "returnParameters": {
              "id": 8161,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8160,
                  "mutability": "mutable",
                  "name": "outputAmount",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 8322,
                  "src": "1377:20:61",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8159,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1377:7:61",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1376:22:61"
            },
            "scope": 8571,
            "src": "1089:1750:61",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              5388
            ],
            "body": {
              "id": 8565,
              "nodeType": "Block",
              "src": "3167:2386:61",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 8355,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 8349,
                            "name": "path",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8325,
                            "src": "3198:4:61",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                              "typeString": "address[] calldata"
                            }
                          },
                          "id": 8350,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "3198:11:61",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 8354,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 8351,
                              "name": "pairs",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8328,
                              "src": "3213:5:61",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                "typeString": "address[] calldata"
                              }
                            },
                            "id": 8352,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "3213:12:61",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "+",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "31",
                            "id": 8353,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "3228:1:61",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          },
                          "src": "3213:16:61",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "3198:31:61",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "537761707061526f757465723a205061746820616e64205061697273206d69736d6174636821",
                        "id": 8356,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3243:40:61",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_cbc4675579917e5fda45a353d444f0d37d533038808e91996b46a0da5ca80931",
                          "typeString": "literal_string \"SwappaRouter: Path and Pairs mismatch!\""
                        },
                        "value": "SwappaRouter: Path and Pairs mismatch!"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_cbc4675579917e5fda45a353d444f0d37d533038808e91996b46a0da5ca80931",
                          "typeString": "literal_string \"SwappaRouter: Path and Pairs mismatch!\""
                        }
                      ],
                      "id": 8348,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "3177:7:61",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 8357,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3177:116:61",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8358,
                  "nodeType": "ExpressionStatement",
                  "src": "3177:116:61"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 8364,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 8360,
                            "name": "pairs",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8328,
                            "src": "3324:5:61",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                              "typeString": "address[] calldata"
                            }
                          },
                          "id": 8361,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "3324:12:61",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 8362,
                            "name": "extras",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8331,
                            "src": "3340:6:61",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr",
                              "typeString": "bytes calldata[] calldata"
                            }
                          },
                          "id": 8363,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "3340:13:61",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "3324:29:61",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "537761707061526f757465723a20506169727320616e6420457874726173206d69736d6174636821",
                        "id": 8365,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3367:42:61",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_aa79a2f1b8ccadf65acf1e8a1304938ec50b5c0614873c30a77bee5848d93d9a",
                          "typeString": "literal_string \"SwappaRouter: Pairs and Extras mismatch!\""
                        },
                        "value": "SwappaRouter: Pairs and Extras mismatch!"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_aa79a2f1b8ccadf65acf1e8a1304938ec50b5c0614873c30a77bee5848d93d9a",
                          "typeString": "literal_string \"SwappaRouter: Pairs and Extras mismatch!\""
                        }
                      ],
                      "id": 8359,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "3303:7:61",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 8366,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3303:116:61",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8367,
                  "nodeType": "ExpressionStatement",
                  "src": "3303:116:61"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 8372,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 8369,
                            "name": "pairs",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8328,
                            "src": "3437:5:61",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                              "typeString": "address[] calldata"
                            }
                          },
                          "id": 8370,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "3437:12:61",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 8371,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "3452:1:61",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "3437:16:61",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "537761707061526f757465723a204d7573742068617665206174206c65617374206f6e65207061697221",
                        "id": 8373,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3455:44:61",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_50f8820bfeecb849a00cbe9e7b54a6b373cb7c22aa55809a32600c36edb64fa6",
                          "typeString": "literal_string \"SwappaRouter: Must have at least one pair!\""
                        },
                        "value": "SwappaRouter: Must have at least one pair!"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_50f8820bfeecb849a00cbe9e7b54a6b373cb7c22aa55809a32600c36edb64fa6",
                          "typeString": "literal_string \"SwappaRouter: Must have at least one pair!\""
                        }
                      ],
                      "id": 8368,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "3429:7:61",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 8374,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3429:71:61",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8375,
                  "nodeType": "ExpressionStatement",
                  "src": "3429:71:61"
                },
                {
                  "id": 8433,
                  "nodeType": "Block",
                  "src": "3787:660:61",
                  "statements": [
                    {
                      "expression": {
                        "argumentTypes": null,
                        "id": 8378,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftHandSide": {
                          "argumentTypes": null,
                          "id": 8376,
                          "name": "outputAmount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8346,
                          "src": "3801:12:61",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "Assignment",
                        "operator": "=",
                        "rightHandSide": {
                          "argumentTypes": null,
                          "id": 8377,
                          "name": "inputAmount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8333,
                          "src": "3816:11:61",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "3801:26:61",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 8379,
                      "nodeType": "ExpressionStatement",
                      "src": "3801:26:61"
                    },
                    {
                      "body": {
                        "id": 8424,
                        "nodeType": "Block",
                        "src": "3942:341:61",
                        "statements": [
                          {
                            "assignments": [
                              8391,
                              8393
                            ],
                            "declarations": [
                              {
                                "constant": false,
                                "id": 8391,
                                "mutability": "mutable",
                                "name": "input",
                                "nodeType": "VariableDeclaration",
                                "overrides": null,
                                "scope": 8424,
                                "src": "3961:13:61",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                "typeName": {
                                  "id": 8390,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "3961:7:61",
                                  "stateMutability": "nonpayable",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "value": null,
                                "visibility": "internal"
                              },
                              {
                                "constant": false,
                                "id": 8393,
                                "mutability": "mutable",
                                "name": "output",
                                "nodeType": "VariableDeclaration",
                                "overrides": null,
                                "scope": 8424,
                                "src": "3976:14:61",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                "typeName": {
                                  "id": 8392,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "3976:7:61",
                                  "stateMutability": "nonpayable",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "value": null,
                                "visibility": "internal"
                              }
                            ],
                            "id": 8403,
                            "initialValue": {
                              "argumentTypes": null,
                              "components": [
                                {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 8394,
                                    "name": "path",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8325,
                                    "src": "3995:4:61",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                      "typeString": "address[] calldata"
                                    }
                                  },
                                  "id": 8396,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "id": 8395,
                                    "name": "i",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8381,
                                    "src": "4000:1:61",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "3995:7:61",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 8397,
                                    "name": "path",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8325,
                                    "src": "4004:4:61",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                      "typeString": "address[] calldata"
                                    }
                                  },
                                  "id": 8401,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 8400,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "argumentTypes": null,
                                      "id": 8398,
                                      "name": "i",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 8381,
                                      "src": "4009:1:61",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "+",
                                    "rightExpression": {
                                      "argumentTypes": null,
                                      "hexValue": "31",
                                      "id": 8399,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "4013:1:61",
                                      "subdenomination": null,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_1_by_1",
                                        "typeString": "int_const 1"
                                      },
                                      "value": "1"
                                    },
                                    "src": "4009:5:61",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "4004:11:61",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "id": 8402,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "3994:22:61",
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$_t_address_$_t_address_$",
                                "typeString": "tuple(address,address)"
                              }
                            },
                            "nodeType": "VariableDeclarationStatement",
                            "src": "3960:56:61"
                          },
                          {
                            "assignments": [
                              8405
                            ],
                            "declarations": [
                              {
                                "constant": false,
                                "id": 8405,
                                "mutability": "mutable",
                                "name": "data",
                                "nodeType": "VariableDeclaration",
                                "overrides": null,
                                "scope": 8424,
                                "src": "4034:17:61",
                                "stateVariable": false,
                                "storageLocation": "memory",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes"
                                },
                                "typeName": {
                                  "id": 8404,
                                  "name": "bytes",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "4034:5:61",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_storage_ptr",
                                    "typeString": "bytes"
                                  }
                                },
                                "value": null,
                                "visibility": "internal"
                              }
                            ],
                            "id": 8409,
                            "initialValue": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 8406,
                                "name": "extras",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8331,
                                "src": "4054:6:61",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr",
                                  "typeString": "bytes calldata[] calldata"
                                }
                              },
                              "id": 8408,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 8407,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8381,
                                "src": "4061:1:61",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "4054:9:61",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_calldata_ptr",
                                "typeString": "bytes calldata"
                              }
                            },
                            "nodeType": "VariableDeclarationStatement",
                            "src": "4034:29:61"
                          },
                          {
                            "expression": {
                              "argumentTypes": null,
                              "id": 8422,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "argumentTypes": null,
                                "id": 8410,
                                "name": "outputAmount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8346,
                                "src": "4081:12:61",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 8417,
                                    "name": "input",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8391,
                                    "src": "4157:5:61",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 8418,
                                    "name": "output",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8393,
                                    "src": "4184:6:61",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 8419,
                                    "name": "outputAmount",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8346,
                                    "src": "4212:12:61",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 8420,
                                    "name": "data",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8405,
                                    "src": "4246:4:61",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "baseExpression": {
                                          "argumentTypes": null,
                                          "id": 8412,
                                          "name": "pairs",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 8328,
                                          "src": "4110:5:61",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                            "typeString": "address[] calldata"
                                          }
                                        },
                                        "id": 8414,
                                        "indexExpression": {
                                          "argumentTypes": null,
                                          "id": 8413,
                                          "name": "i",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 8381,
                                          "src": "4116:1:61",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "4110:8:61",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      ],
                                      "id": 8411,
                                      "name": "ISwappaPairV1",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5325,
                                      "src": "4096:13:61",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_ISwappaPairV1_$5325_$",
                                        "typeString": "type(contract ISwappaPairV1)"
                                      }
                                    },
                                    "id": 8415,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "4096:23:61",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_ISwappaPairV1_$5325",
                                      "typeString": "contract ISwappaPairV1"
                                    }
                                  },
                                  "id": 8416,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "getOutputAmount",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 5324,
                                  "src": "4096:39:61",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$_t_uint256_$",
                                    "typeString": "function (address,address,uint256,bytes memory) external returns (uint256)"
                                  }
                                },
                                "id": 8421,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "4096:172:61",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "4081:187:61",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 8423,
                            "nodeType": "ExpressionStatement",
                            "src": "4081:187:61"
                          }
                        ]
                      },
                      "condition": {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 8386,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 8383,
                          "name": "i",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8381,
                          "src": "3919:1:61",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 8384,
                            "name": "pairs",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8328,
                            "src": "3923:5:61",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                              "typeString": "address[] calldata"
                            }
                          },
                          "id": 8385,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "3923:12:61",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "3919:16:61",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "id": 8425,
                      "initializationExpression": {
                        "assignments": [
                          8381
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 8381,
                            "mutability": "mutable",
                            "name": "i",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 8425,
                            "src": "3911:6:61",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 8380,
                              "name": "uint",
                              "nodeType": "ElementaryTypeName",
                              "src": "3911:4:61",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 8382,
                        "initialValue": null,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "3911:6:61"
                      },
                      "loopExpression": {
                        "expression": {
                          "argumentTypes": null,
                          "id": 8388,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "++",
                          "prefix": false,
                          "src": "3937:3:61",
                          "subExpression": {
                            "argumentTypes": null,
                            "id": 8387,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8381,
                            "src": "3937:1:61",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 8389,
                        "nodeType": "ExpressionStatement",
                        "src": "3937:3:61"
                      },
                      "nodeType": "ForStatement",
                      "src": "3906:377:61"
                    },
                    {
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 8429,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "id": 8427,
                              "name": "outputAmount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8346,
                              "src": "4321:12:61",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": ">=",
                            "rightExpression": {
                              "argumentTypes": null,
                              "id": 8428,
                              "name": "minOutputAmount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8335,
                              "src": "4337:15:61",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "4321:31:61",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "hexValue": "537761707061526f757465723a20496e73756666696369656e74206578706563746564206f757470757420616d6f756e7421",
                            "id": 8430,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "4370:52:61",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_92c647a9df827f435e95e55348ef3d9783657104085606ff16cb5738ddbeffe7",
                              "typeString": "literal_string \"SwappaRouter: Insufficient expected output amount!\""
                            },
                            "value": "SwappaRouter: Insufficient expected output amount!"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            {
                              "typeIdentifier": "t_stringliteral_92c647a9df827f435e95e55348ef3d9783657104085606ff16cb5738ddbeffe7",
                              "typeString": "literal_string \"SwappaRouter: Insufficient expected output amount!\""
                            }
                          ],
                          "id": 8426,
                          "name": "require",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [
                            -18,
                            -18
                          ],
                          "referencedDeclaration": -18,
                          "src": "4296:7:61",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                            "typeString": "function (bool,string memory) pure"
                          }
                        },
                        "id": 8431,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4296:140:61",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_tuple$__$",
                          "typeString": "tuple()"
                        }
                      },
                      "id": 8432,
                      "nodeType": "ExpressionStatement",
                      "src": "4296:140:61"
                    }
                  ]
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 8441,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -15,
                              "src": "4506:3:61",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 8442,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "4506:10:61",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 8443,
                              "name": "pairs",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8328,
                              "src": "4518:5:61",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                "typeString": "address[] calldata"
                              }
                            },
                            "id": 8445,
                            "indexExpression": {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 8444,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "4524:1:61",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "4518:8:61",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 8446,
                            "name": "inputAmount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8333,
                            "src": "4528:11:61",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "id": 8436,
                                  "name": "path",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8325,
                                  "src": "4484:4:61",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                    "typeString": "address[] calldata"
                                  }
                                },
                                "id": 8438,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "hexValue": "30",
                                  "id": 8437,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "4489:1:61",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                },
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "4484:7:61",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 8435,
                              "name": "ERC20",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 725,
                              "src": "4478:5:61",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_ERC20_$725_$",
                                "typeString": "type(contract ERC20)"
                              }
                            },
                            "id": 8439,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "4478:14:61",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ERC20_$725",
                              "typeString": "contract ERC20"
                            }
                          },
                          "id": 8440,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "transferFrom",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 423,
                          "src": "4478:27:61",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$",
                            "typeString": "function (address,address,uint256) external returns (bool)"
                          }
                        },
                        "id": 8447,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4478:62:61",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "537761707061526f757465723a20496e697469616c207472616e7366657246726f6d206661696c656421",
                        "id": 8448,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4554:44:61",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_5d4db394429342c290de88dc1012d1383b0e08cbeb120c2513f7aad8def9fc3d",
                          "typeString": "literal_string \"SwappaRouter: Initial transferFrom failed!\""
                        },
                        "value": "SwappaRouter: Initial transferFrom failed!"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_5d4db394429342c290de88dc1012d1383b0e08cbeb120c2513f7aad8def9fc3d",
                          "typeString": "literal_string \"SwappaRouter: Initial transferFrom failed!\""
                        }
                      ],
                      "id": 8434,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "4457:7:61",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 8449,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4457:151:61",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8450,
                  "nodeType": "ExpressionStatement",
                  "src": "4457:151:61"
                },
                {
                  "body": {
                    "id": 8512,
                    "nodeType": "Block",
                    "src": "4654:289:61",
                    "statements": [
                      {
                        "assignments": [
                          8462,
                          8464
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 8462,
                            "mutability": "mutable",
                            "name": "pairInput",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 8512,
                            "src": "4669:17:61",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "typeName": {
                              "id": 8461,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "4669:7:61",
                              "stateMutability": "nonpayable",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          },
                          {
                            "constant": false,
                            "id": 8464,
                            "mutability": "mutable",
                            "name": "pairOutput",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 8512,
                            "src": "4688:18:61",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "typeName": {
                              "id": 8463,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "4688:7:61",
                              "stateMutability": "nonpayable",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 8474,
                        "initialValue": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 8465,
                                "name": "path",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8325,
                                "src": "4711:4:61",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                  "typeString": "address[] calldata"
                                }
                              },
                              "id": 8467,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 8466,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8452,
                                "src": "4716:1:61",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "4711:7:61",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 8468,
                                "name": "path",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8325,
                                "src": "4720:4:61",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                  "typeString": "address[] calldata"
                                }
                              },
                              "id": 8472,
                              "indexExpression": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 8471,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "id": 8469,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8452,
                                  "src": "4725:1:61",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "+",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "hexValue": "31",
                                  "id": 8470,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "4729:1:61",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_1_by_1",
                                    "typeString": "int_const 1"
                                  },
                                  "value": "1"
                                },
                                "src": "4725:5:61",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "4720:11:61",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "id": 8473,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "4710:22:61",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_address_$_t_address_$",
                            "typeString": "tuple(address,address)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "4668:64:61"
                      },
                      {
                        "assignments": [
                          8476
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 8476,
                            "mutability": "mutable",
                            "name": "next",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 8512,
                            "src": "4746:12:61",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "typeName": {
                              "id": 8475,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "4746:7:61",
                              "stateMutability": "nonpayable",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 8493,
                        "initialValue": {
                          "argumentTypes": null,
                          "condition": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 8482,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "id": 8477,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8452,
                              "src": "4761:1:61",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "<",
                            "rightExpression": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 8481,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 8478,
                                  "name": "pairs",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8328,
                                  "src": "4765:5:61",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                    "typeString": "address[] calldata"
                                  }
                                },
                                "id": 8479,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "length",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "4765:12:61",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "-",
                              "rightExpression": {
                                "argumentTypes": null,
                                "hexValue": "31",
                                "id": 8480,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "4780:1:61",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_1_by_1",
                                  "typeString": "int_const 1"
                                },
                                "value": "1"
                              },
                              "src": "4765:16:61",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "4761:20:61",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "falseExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 8490,
                                "name": "this",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -28,
                                "src": "4807:4:61",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_SwappaRouterV1_$8571",
                                  "typeString": "contract SwappaRouterV1"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_SwappaRouterV1_$8571",
                                  "typeString": "contract SwappaRouterV1"
                                }
                              ],
                              "id": 8489,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "4799:7:61",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 8488,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "4799:7:61",
                                "typeDescriptions": {
                                  "typeIdentifier": null,
                                  "typeString": null
                                }
                              }
                            },
                            "id": 8491,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "4799:13:61",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          "id": 8492,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "Conditional",
                          "src": "4761:51:61",
                          "trueExpression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 8483,
                              "name": "pairs",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8328,
                              "src": "4784:5:61",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                "typeString": "address[] calldata"
                              }
                            },
                            "id": 8487,
                            "indexExpression": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 8486,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 8484,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8452,
                                "src": "4790:1:61",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "+",
                              "rightExpression": {
                                "argumentTypes": null,
                                "hexValue": "31",
                                "id": 8485,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "4794:1:61",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_1_by_1",
                                  "typeString": "int_const 1"
                                },
                                "value": "1"
                              },
                              "src": "4790:5:61",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "4784:12:61",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "4746:66:61"
                      },
                      {
                        "assignments": [
                          8495
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 8495,
                            "mutability": "mutable",
                            "name": "data",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 8512,
                            "src": "4826:17:61",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes"
                            },
                            "typeName": {
                              "id": 8494,
                              "name": "bytes",
                              "nodeType": "ElementaryTypeName",
                              "src": "4826:5:61",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_storage_ptr",
                                "typeString": "bytes"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 8499,
                        "initialValue": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 8496,
                            "name": "extras",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8331,
                            "src": "4846:6:61",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr",
                              "typeString": "bytes calldata[] calldata"
                            }
                          },
                          "id": 8498,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 8497,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8452,
                            "src": "4853:1:61",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "4846:9:61",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_calldata_ptr",
                            "typeString": "bytes calldata"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "4826:29:61"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 8506,
                              "name": "pairInput",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8462,
                              "src": "4898:9:61",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 8507,
                              "name": "pairOutput",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8464,
                              "src": "4909:10:61",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 8508,
                              "name": "next",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8476,
                              "src": "4921:4:61",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 8509,
                              "name": "data",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8495,
                              "src": "4927:4:61",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 8501,
                                    "name": "pairs",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8328,
                                    "src": "4883:5:61",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                      "typeString": "address[] calldata"
                                    }
                                  },
                                  "id": 8503,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "id": 8502,
                                    "name": "i",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8452,
                                    "src": "4889:1:61",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "4883:8:61",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 8500,
                                "name": "ISwappaPairV1",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5325,
                                "src": "4869:13:61",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_ISwappaPairV1_$5325_$",
                                  "typeString": "type(contract ISwappaPairV1)"
                                }
                              },
                              "id": 8504,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "4869:23:61",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ISwappaPairV1_$5325",
                                "typeString": "contract ISwappaPairV1"
                              }
                            },
                            "id": 8505,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "swap",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 5311,
                            "src": "4869:28:61",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_address_$_t_bytes_memory_ptr_$returns$__$",
                              "typeString": "function (address,address,address,bytes memory) external"
                            }
                          },
                          "id": 8510,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4869:63:61",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 8511,
                        "nodeType": "ExpressionStatement",
                        "src": "4869:63:61"
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 8457,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 8454,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8452,
                      "src": "4631:1:61",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 8455,
                        "name": "pairs",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8328,
                        "src": "4635:5:61",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                          "typeString": "address[] calldata"
                        }
                      },
                      "id": 8456,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "4635:12:61",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "4631:16:61",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 8513,
                  "initializationExpression": {
                    "assignments": [
                      8452
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 8452,
                        "mutability": "mutable",
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 8513,
                        "src": "4623:6:61",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 8451,
                          "name": "uint",
                          "nodeType": "ElementaryTypeName",
                          "src": "4623:4:61",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 8453,
                    "initialValue": null,
                    "nodeType": "VariableDeclarationStatement",
                    "src": "4623:6:61"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 8459,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "4649:3:61",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 8458,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8452,
                        "src": "4649:1:61",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 8460,
                    "nodeType": "ExpressionStatement",
                    "src": "4649:3:61"
                  },
                  "nodeType": "ForStatement",
                  "src": "4618:325:61"
                },
                {
                  "assignments": [
                    8515
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8515,
                      "mutability": "mutable",
                      "name": "output",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 8565,
                      "src": "5104:14:61",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 8514,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "5104:7:61",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8522,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 8516,
                      "name": "path",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8325,
                      "src": "5121:4:61",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                        "typeString": "address[] calldata"
                      }
                    },
                    "id": 8521,
                    "indexExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 8520,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8517,
                          "name": "path",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8325,
                          "src": "5126:4:61",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                            "typeString": "address[] calldata"
                          }
                        },
                        "id": 8518,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "length",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "5126:11:61",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "-",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "31",
                        "id": 8519,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "5140:1:61",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        "value": "1"
                      },
                      "src": "5126:15:61",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "5121:21:61",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5104:38:61"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8533,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 8523,
                      "name": "outputAmount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8346,
                      "src": "5152:12:61",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 8530,
                              "name": "this",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -28,
                              "src": "5199:4:61",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_SwappaRouterV1_$8571",
                                "typeString": "contract SwappaRouterV1"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_SwappaRouterV1_$8571",
                                "typeString": "contract SwappaRouterV1"
                              }
                            ],
                            "id": 8529,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "5191:7:61",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 8528,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "5191:7:61",
                              "typeDescriptions": {
                                "typeIdentifier": null,
                                "typeString": null
                              }
                            }
                          },
                          "id": 8531,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5191:13:61",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 8525,
                              "name": "output",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8515,
                              "src": "5173:6:61",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 8524,
                            "name": "ERC20",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 725,
                            "src": "5167:5:61",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_ERC20_$725_$",
                              "typeString": "type(contract ERC20)"
                            }
                          },
                          "id": 8526,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5167:13:61",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_ERC20_$725",
                            "typeString": "contract ERC20"
                          }
                        },
                        "id": 8527,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "balanceOf",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 325,
                        "src": "5167:23:61",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                          "typeString": "function (address) view external returns (uint256)"
                        }
                      },
                      "id": 8532,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "5167:38:61",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "5152:53:61",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 8534,
                  "nodeType": "ExpressionStatement",
                  "src": "5152:53:61"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 8538,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 8536,
                          "name": "outputAmount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8346,
                          "src": "5236:12:61",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 8537,
                          "name": "minOutputAmount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8335,
                          "src": "5252:15:61",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "5236:31:61",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "537761707061526f757465723a20496e73756666696369656e74206f757470757420616d6f756e7421",
                        "id": 8539,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "5281:43:61",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_cefd04d9f158c54476d457b22a80719a9743d5a6e0418466da4fa21996dd4acf",
                          "typeString": "literal_string \"SwappaRouter: Insufficient output amount!\""
                        },
                        "value": "SwappaRouter: Insufficient output amount!"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_cefd04d9f158c54476d457b22a80719a9743d5a6e0418466da4fa21996dd4acf",
                          "typeString": "literal_string \"SwappaRouter: Insufficient output amount!\""
                        }
                      ],
                      "id": 8535,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "5215:7:61",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 8540,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5215:119:61",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8541,
                  "nodeType": "ExpressionStatement",
                  "src": "5215:119:61"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 8547,
                            "name": "to",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8337,
                            "src": "5388:2:61",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 8548,
                            "name": "outputAmount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8346,
                            "src": "5392:12:61",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 8544,
                                "name": "output",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8515,
                                "src": "5371:6:61",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 8543,
                              "name": "ERC20",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 725,
                              "src": "5365:5:61",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_ERC20_$725_$",
                                "typeString": "type(contract ERC20)"
                              }
                            },
                            "id": 8545,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "5365:13:61",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ERC20_$725",
                              "typeString": "contract ERC20"
                            }
                          },
                          "id": 8546,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "transfer",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 346,
                          "src": "5365:22:61",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                            "typeString": "function (address,uint256) external returns (bool)"
                          }
                        },
                        "id": 8549,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5365:40:61",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "537761707061526f757465723a2046696e616c207472616e73666572206661696c656421",
                        "id": 8550,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "5419:38:61",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_9adfc36c8bf82468d0028ce6cfdb8f1360397ed2f3915c2f2b40899f5aface4f",
                          "typeString": "literal_string \"SwappaRouter: Final transfer failed!\""
                        },
                        "value": "SwappaRouter: Final transfer failed!"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_9adfc36c8bf82468d0028ce6cfdb8f1360397ed2f3915c2f2b40899f5aface4f",
                          "typeString": "literal_string \"SwappaRouter: Final transfer failed!\""
                        }
                      ],
                      "id": 8542,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "5344:7:61",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 8551,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5344:123:61",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8552,
                  "nodeType": "ExpressionStatement",
                  "src": "5344:123:61"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8554,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "5487:3:61",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 8555,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "5487:10:61",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8556,
                        "name": "to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8337,
                        "src": "5499:2:61",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 8557,
                          "name": "path",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8325,
                          "src": "5503:4:61",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                            "typeString": "address[] calldata"
                          }
                        },
                        "id": 8559,
                        "indexExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 8558,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "5508:1:61",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "5503:7:61",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8560,
                        "name": "output",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8515,
                        "src": "5512:6:61",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8561,
                        "name": "inputAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8333,
                        "src": "5520:11:61",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8562,
                        "name": "outputAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8346,
                        "src": "5533:12:61",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 8553,
                      "name": "Swap",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8066,
                      "src": "5482:4:61",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,address,address,uint256,uint256)"
                      }
                    },
                    "id": 8563,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5482:64:61",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8564,
                  "nodeType": "EmitStatement",
                  "src": "5477:69:61"
                }
              ]
            },
            "documentation": null,
            "functionSelector": "adf6fa02",
            "id": 8566,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 8343,
                    "name": "deadline",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8339,
                    "src": "3126:8:61",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                ],
                "id": 8344,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8342,
                  "name": "ensure",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 8080,
                  "src": "3119:6:61",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_uint256_$",
                    "typeString": "modifier (uint256)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "3119:16:61"
              }
            ],
            "name": "swapExactInputForOutputWithPrecheck",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 8341,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "3110:8:61"
            },
            "parameters": {
              "id": 8340,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8325,
                  "mutability": "mutable",
                  "name": "path",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 8566,
                  "src": "2899:23:61",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 8323,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "2899:7:61",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 8324,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "2899:9:61",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8328,
                  "mutability": "mutable",
                  "name": "pairs",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 8566,
                  "src": "2932:24:61",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 8326,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "2932:7:61",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 8327,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "2932:9:61",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8331,
                  "mutability": "mutable",
                  "name": "extras",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 8566,
                  "src": "2966:23:61",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr",
                    "typeString": "bytes[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 8329,
                      "name": "bytes",
                      "nodeType": "ElementaryTypeName",
                      "src": "2966:5:61",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_storage_ptr",
                        "typeString": "bytes"
                      }
                    },
                    "id": 8330,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "2966:7:61",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes_storage_$dyn_storage_ptr",
                      "typeString": "bytes[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8333,
                  "mutability": "mutable",
                  "name": "inputAmount",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 8566,
                  "src": "2999:19:61",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8332,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2999:7:61",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8335,
                  "mutability": "mutable",
                  "name": "minOutputAmount",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 8566,
                  "src": "3028:23:61",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8334,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3028:7:61",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8337,
                  "mutability": "mutable",
                  "name": "to",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 8566,
                  "src": "3061:10:61",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8336,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3061:7:61",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8339,
                  "mutability": "mutable",
                  "name": "deadline",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 8566,
                  "src": "3081:13:61",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8338,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "3081:4:61",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2889:211:61"
            },
            "returnParameters": {
              "id": 8347,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8346,
                  "mutability": "mutable",
                  "name": "outputAmount",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 8566,
                  "src": "3145:20:61",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8345,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3145:7:61",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3144:22:61"
            },
            "scope": 8571,
            "src": "2845:2708:61",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 8569,
              "nodeType": "Block",
              "src": "5586:2:61",
              "statements": []
            },
            "documentation": null,
            "id": 8570,
            "implemented": true,
            "kind": "receive",
            "modifiers": [],
            "name": "",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 8567,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5566:2:61"
            },
            "returnParameters": {
              "id": 8568,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5586:0:61"
            },
            "scope": 8571,
            "src": "5559:29:61",
            "stateMutability": "payable",
            "virtual": false,
            "visibility": "external"
          }
        ],
        "scope": 8572,
        "src": "209:5381:61"
      }
    ],
    "src": "32:5559:61"
  },
  "legacyAST": {
    "attributes": {
      "absolutePath": "project:/contracts/swappa/SwappaRouterV1.sol",
      "exportedSymbols": {
        "SwappaRouterV1": [
          8571
        ]
      },
      "license": "MIT"
    },
    "children": [
      {
        "attributes": {
          "literals": [
            "solidity",
            "0.6",
            ".8"
          ]
        },
        "id": 8046,
        "name": "PragmaDirective",
        "src": "32:22:61"
      },
      {
        "attributes": {
          "literals": [
            "experimental",
            "ABIEncoderV2"
          ]
        },
        "id": 8047,
        "name": "PragmaDirective",
        "src": "55:33:61"
      },
      {
        "attributes": {
          "SourceUnit": 726,
          "absolutePath": "@openzeppelin/contracts/token/ERC20/ERC20.sol",
          "file": "@openzeppelin/contracts/token/ERC20/ERC20.sol",
          "scope": 8572,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 8048,
        "name": "ImportDirective",
        "src": "90:55:61"
      },
      {
        "attributes": {
          "SourceUnit": 5326,
          "absolutePath": "project:/contracts/swappa/ISwappaPairV1.sol",
          "file": "./ISwappaPairV1.sol",
          "scope": 8572,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 8049,
        "name": "ImportDirective",
        "src": "146:29:61"
      },
      {
        "attributes": {
          "SourceUnit": 5390,
          "absolutePath": "project:/contracts/swappa/ISwappaRouterV1.sol",
          "file": "./ISwappaRouterV1.sol",
          "scope": 8572,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 8050,
        "name": "ImportDirective",
        "src": "176:31:61"
      },
      {
        "attributes": {
          "abstract": false,
          "contractDependencies": [
            5389
          ],
          "contractKind": "contract",
          "documentation": null,
          "fullyImplemented": true,
          "linearizedBaseContracts": [
            8571,
            5389
          ],
          "name": "SwappaRouterV1",
          "scope": 8572
        },
        "children": [
          {
            "attributes": {
              "arguments": null
            },
            "children": [
              {
                "attributes": {
                  "contractScope": null,
                  "name": "ISwappaRouterV1",
                  "referencedDeclaration": 5389,
                  "type": "contract ISwappaRouterV1"
                },
                "id": 8051,
                "name": "UserDefinedTypeName",
                "src": "236:15:61"
              }
            ],
            "id": 8052,
            "name": "InheritanceSpecifier",
            "src": "236:15:61"
          },
          {
            "attributes": {
              "anonymous": false,
              "documentation": null,
              "name": "Swap"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "indexed": true,
                      "mutability": "mutable",
                      "name": "sender",
                      "overrides": null,
                      "scope": 8066,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 8053,
                        "name": "ElementaryTypeName",
                        "src": "278:7:61"
                      }
                    ],
                    "id": 8054,
                    "name": "VariableDeclaration",
                    "src": "278:22:61"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "indexed": false,
                      "mutability": "mutable",
                      "name": "to",
                      "overrides": null,
                      "scope": 8066,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 8055,
                        "name": "ElementaryTypeName",
                        "src": "310:7:61"
                      }
                    ],
                    "id": 8056,
                    "name": "VariableDeclaration",
                    "src": "310:10:61"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "indexed": true,
                      "mutability": "mutable",
                      "name": "input",
                      "overrides": null,
                      "scope": 8066,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 8057,
                        "name": "ElementaryTypeName",
                        "src": "330:7:61"
                      }
                    ],
                    "id": 8058,
                    "name": "VariableDeclaration",
                    "src": "330:21:61"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "indexed": true,
                      "mutability": "mutable",
                      "name": "output",
                      "overrides": null,
                      "scope": 8066,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 8059,
                        "name": "ElementaryTypeName",
                        "src": "361:7:61"
                      }
                    ],
                    "id": 8060,
                    "name": "VariableDeclaration",
                    "src": "361:22:61"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "indexed": false,
                      "mutability": "mutable",
                      "name": "inputAmount",
                      "overrides": null,
                      "scope": 8066,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 8061,
                        "name": "ElementaryTypeName",
                        "src": "393:7:61"
                      }
                    ],
                    "id": 8062,
                    "name": "VariableDeclaration",
                    "src": "393:19:61"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "indexed": false,
                      "mutability": "mutable",
                      "name": "outputAmount",
                      "overrides": null,
                      "scope": 8066,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 8063,
                        "name": "ElementaryTypeName",
                        "src": "422:7:61"
                      }
                    ],
                    "id": 8064,
                    "name": "VariableDeclaration",
                    "src": "422:20:61"
                  }
                ],
                "id": 8065,
                "name": "ParameterList",
                "src": "268:180:61"
              }
            ],
            "id": 8066,
            "name": "EventDefinition",
            "src": "258:191:61"
          },
          {
            "attributes": {
              "documentation": null,
              "name": "ensure",
              "overrides": null,
              "virtual": false,
              "visibility": "internal"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "deadline",
                      "overrides": null,
                      "scope": 8080,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint",
                          "type": "uint256"
                        },
                        "id": 8067,
                        "name": "ElementaryTypeName",
                        "src": "471:4:61"
                      }
                    ],
                    "id": 8068,
                    "name": "VariableDeclaration",
                    "src": "471:13:61"
                  }
                ],
                "id": 8069,
                "name": "ParameterList",
                "src": "470:15:61"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_9ed8592ea2f5619ebcb3e301962e66ed8fe7649ccf8e6d5cbf672aa0763f3846",
                                  "typeString": "literal_string \"SwappaRouter: Expired!\""
                                }
                              ],
                              "overloadedDeclarations": [
                                -18,
                                -18
                              ],
                              "referencedDeclaration": -18,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 8070,
                            "name": "Identifier",
                            "src": "496:7:61"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": ">=",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 8068,
                                  "type": "uint256",
                                  "value": "deadline"
                                },
                                "id": 8071,
                                "name": "Identifier",
                                "src": "504:8:61"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "timestamp",
                                  "referencedDeclaration": null,
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": -4,
                                      "type": "block",
                                      "value": "block"
                                    },
                                    "id": 8072,
                                    "name": "Identifier",
                                    "src": "516:5:61"
                                  }
                                ],
                                "id": 8073,
                                "name": "MemberAccess",
                                "src": "516:15:61"
                              }
                            ],
                            "id": 8074,
                            "name": "BinaryOperation",
                            "src": "504:27:61"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "537761707061526f757465723a204578706972656421",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "string",
                              "type": "literal_string \"SwappaRouter: Expired!\"",
                              "value": "SwappaRouter: Expired!"
                            },
                            "id": 8075,
                            "name": "Literal",
                            "src": "533:24:61"
                          }
                        ],
                        "id": 8076,
                        "name": "FunctionCall",
                        "src": "496:62:61"
                      }
                    ],
                    "id": 8077,
                    "name": "ExpressionStatement",
                    "src": "496:62:61"
                  },
                  {
                    "id": 8078,
                    "name": "PlaceholderStatement",
                    "src": "568:1:61"
                  }
                ],
                "id": 8079,
                "name": "Block",
                "src": "486:90:61"
              }
            ],
            "id": 8080,
            "name": "ModifierDefinition",
            "src": "455:121:61"
          },
          {
            "attributes": {
              "baseFunctions": [
                5344
              ],
              "documentation": null,
              "functionSelector": "e2f46a00",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "getOutputAmount",
              "scope": 8571,
              "stateMutability": "nonpayable",
              "virtual": false,
              "visibility": "external"
            },
            "children": [
              {
                "attributes": {
                  "overrides": [
                    null
                  ]
                },
                "id": 8093,
                "name": "OverrideSpecifier",
                "src": "751:8:61"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "path",
                      "overrides": null,
                      "scope": 8136,
                      "stateVariable": false,
                      "storageLocation": "calldata",
                      "type": "address[]",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "length": null,
                          "type": "address[]"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "address",
                              "stateMutability": "nonpayable",
                              "type": "address"
                            },
                            "id": 8081,
                            "name": "ElementaryTypeName",
                            "src": "616:7:61"
                          }
                        ],
                        "id": 8082,
                        "name": "ArrayTypeName",
                        "src": "616:9:61"
                      }
                    ],
                    "id": 8083,
                    "name": "VariableDeclaration",
                    "src": "616:23:61"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "pairs",
                      "overrides": null,
                      "scope": 8136,
                      "stateVariable": false,
                      "storageLocation": "calldata",
                      "type": "address[]",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "length": null,
                          "type": "address[]"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "address",
                              "stateMutability": "nonpayable",
                              "type": "address"
                            },
                            "id": 8084,
                            "name": "ElementaryTypeName",
                            "src": "649:7:61"
                          }
                        ],
                        "id": 8085,
                        "name": "ArrayTypeName",
                        "src": "649:9:61"
                      }
                    ],
                    "id": 8086,
                    "name": "VariableDeclaration",
                    "src": "649:24:61"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "extras",
                      "overrides": null,
                      "scope": 8136,
                      "stateVariable": false,
                      "storageLocation": "calldata",
                      "type": "bytes[]",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "length": null,
                          "type": "bytes[]"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "bytes",
                              "type": "bytes"
                            },
                            "id": 8087,
                            "name": "ElementaryTypeName",
                            "src": "683:5:61"
                          }
                        ],
                        "id": 8088,
                        "name": "ArrayTypeName",
                        "src": "683:7:61"
                      }
                    ],
                    "id": 8089,
                    "name": "VariableDeclaration",
                    "src": "683:23:61"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "inputAmount",
                      "overrides": null,
                      "scope": 8136,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 8090,
                        "name": "ElementaryTypeName",
                        "src": "716:7:61"
                      }
                    ],
                    "id": 8091,
                    "name": "VariableDeclaration",
                    "src": "716:19:61"
                  }
                ],
                "id": 8092,
                "name": "ParameterList",
                "src": "606:135:61"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "outputAmount",
                      "overrides": null,
                      "scope": 8136,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 8094,
                        "name": "ElementaryTypeName",
                        "src": "769:7:61"
                      }
                    ],
                    "id": 8095,
                    "name": "VariableDeclaration",
                    "src": "769:20:61"
                  }
                ],
                "id": 8096,
                "name": "ParameterList",
                "src": "768:22:61"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "uint256"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 8095,
                              "type": "uint256",
                              "value": "outputAmount"
                            },
                            "id": 8097,
                            "name": "Identifier",
                            "src": "801:12:61"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 8091,
                              "type": "uint256",
                              "value": "inputAmount"
                            },
                            "id": 8098,
                            "name": "Identifier",
                            "src": "816:11:61"
                          }
                        ],
                        "id": 8099,
                        "name": "Assignment",
                        "src": "801:26:61"
                      }
                    ],
                    "id": 8100,
                    "name": "ExpressionStatement",
                    "src": "801:26:61"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "assignments": [
                            8102
                          ],
                          "initialValue": null
                        },
                        "children": [
                          {
                            "attributes": {
                              "constant": false,
                              "mutability": "mutable",
                              "name": "i",
                              "overrides": null,
                              "scope": 8134,
                              "stateVariable": false,
                              "storageLocation": "default",
                              "type": "uint256",
                              "value": null,
                              "visibility": "internal"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "name": "uint",
                                  "type": "uint256"
                                },
                                "id": 8101,
                                "name": "ElementaryTypeName",
                                "src": "842:4:61"
                              }
                            ],
                            "id": 8102,
                            "name": "VariableDeclaration",
                            "src": "842:6:61"
                          }
                        ],
                        "id": 8103,
                        "name": "VariableDeclarationStatement",
                        "src": "842:6:61"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "<",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 8102,
                              "type": "uint256",
                              "value": "i"
                            },
                            "id": 8104,
                            "name": "Identifier",
                            "src": "850:1:61"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "length",
                              "referencedDeclaration": null,
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 8086,
                                  "type": "address[] calldata",
                                  "value": "pairs"
                                },
                                "id": 8105,
                                "name": "Identifier",
                                "src": "854:5:61"
                              }
                            ],
                            "id": 8106,
                            "name": "MemberAccess",
                            "src": "854:12:61"
                          }
                        ],
                        "id": 8107,
                        "name": "BinaryOperation",
                        "src": "850:16:61"
                      },
                      {
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "++",
                              "prefix": false,
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 8102,
                                  "type": "uint256",
                                  "value": "i"
                                },
                                "id": 8108,
                                "name": "Identifier",
                                "src": "868:1:61"
                              }
                            ],
                            "id": 8109,
                            "name": "UnaryOperation",
                            "src": "868:3:61"
                          }
                        ],
                        "id": 8110,
                        "name": "ExpressionStatement",
                        "src": "868:3:61"
                      },
                      {
                        "children": [
                          {
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "=",
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 8095,
                                      "type": "uint256",
                                      "value": "outputAmount"
                                    },
                                    "id": 8111,
                                    "name": "Identifier",
                                    "src": "887:12:61"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "isStructConstructorCall": false,
                                      "lValueRequested": false,
                                      "names": [
                                        null
                                      ],
                                      "tryCall": false,
                                      "type": "uint256",
                                      "type_conversion": false
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            },
                                            {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            },
                                            {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            },
                                            {
                                              "typeIdentifier": "t_bytes_calldata_ptr",
                                              "typeString": "bytes calldata"
                                            }
                                          ],
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "member_name": "getOutputAmount",
                                          "referencedDeclaration": 5324,
                                          "type": "function (address,address,uint256,bytes memory) external returns (uint256)"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "isStructConstructorCall": false,
                                              "lValueRequested": false,
                                              "names": [
                                                null
                                              ],
                                              "tryCall": false,
                                              "type": "contract ISwappaPairV1",
                                              "type_conversion": true
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "argumentTypes": [
                                                    {
                                                      "typeIdentifier": "t_address",
                                                      "typeString": "address"
                                                    }
                                                  ],
                                                  "overloadedDeclarations": [
                                                    null
                                                  ],
                                                  "referencedDeclaration": 5325,
                                                  "type": "type(contract ISwappaPairV1)",
                                                  "value": "ISwappaPairV1"
                                                },
                                                "id": 8112,
                                                "name": "Identifier",
                                                "src": "902:13:61"
                                              },
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": false,
                                                  "lValueRequested": false,
                                                  "type": "address"
                                                },
                                                "children": [
                                                  {
                                                    "attributes": {
                                                      "argumentTypes": null,
                                                      "overloadedDeclarations": [
                                                        null
                                                      ],
                                                      "referencedDeclaration": 8086,
                                                      "type": "address[] calldata",
                                                      "value": "pairs"
                                                    },
                                                    "id": 8113,
                                                    "name": "Identifier",
                                                    "src": "916:5:61"
                                                  },
                                                  {
                                                    "attributes": {
                                                      "argumentTypes": null,
                                                      "overloadedDeclarations": [
                                                        null
                                                      ],
                                                      "referencedDeclaration": 8102,
                                                      "type": "uint256",
                                                      "value": "i"
                                                    },
                                                    "id": 8114,
                                                    "name": "Identifier",
                                                    "src": "922:1:61"
                                                  }
                                                ],
                                                "id": 8115,
                                                "name": "IndexAccess",
                                                "src": "916:8:61"
                                              }
                                            ],
                                            "id": 8116,
                                            "name": "FunctionCall",
                                            "src": "902:23:61"
                                          }
                                        ],
                                        "id": 8117,
                                        "name": "MemberAccess",
                                        "src": "902:39:61"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "type": "address"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 8083,
                                              "type": "address[] calldata",
                                              "value": "path"
                                            },
                                            "id": 8118,
                                            "name": "Identifier",
                                            "src": "959:4:61"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 8102,
                                              "type": "uint256",
                                              "value": "i"
                                            },
                                            "id": 8119,
                                            "name": "Identifier",
                                            "src": "964:1:61"
                                          }
                                        ],
                                        "id": 8120,
                                        "name": "IndexAccess",
                                        "src": "959:7:61"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "type": "address"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 8083,
                                              "type": "address[] calldata",
                                              "value": "path"
                                            },
                                            "id": 8121,
                                            "name": "Identifier",
                                            "src": "984:4:61"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "commonType": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              },
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "operator": "+",
                                              "type": "uint256"
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "overloadedDeclarations": [
                                                    null
                                                  ],
                                                  "referencedDeclaration": 8102,
                                                  "type": "uint256",
                                                  "value": "i"
                                                },
                                                "id": 8122,
                                                "name": "Identifier",
                                                "src": "989:1:61"
                                              },
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "hexvalue": "31",
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": true,
                                                  "lValueRequested": false,
                                                  "subdenomination": null,
                                                  "token": "number",
                                                  "type": "int_const 1",
                                                  "value": "1"
                                                },
                                                "id": 8123,
                                                "name": "Literal",
                                                "src": "993:1:61"
                                              }
                                            ],
                                            "id": 8124,
                                            "name": "BinaryOperation",
                                            "src": "989:5:61"
                                          }
                                        ],
                                        "id": 8125,
                                        "name": "IndexAccess",
                                        "src": "984:11:61"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 8095,
                                          "type": "uint256",
                                          "value": "outputAmount"
                                        },
                                        "id": 8126,
                                        "name": "Identifier",
                                        "src": "1013:12:61"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "type": "bytes calldata"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 8089,
                                              "type": "bytes calldata[] calldata",
                                              "value": "extras"
                                            },
                                            "id": 8127,
                                            "name": "Identifier",
                                            "src": "1043:6:61"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 8102,
                                              "type": "uint256",
                                              "value": "i"
                                            },
                                            "id": 8128,
                                            "name": "Identifier",
                                            "src": "1050:1:61"
                                          }
                                        ],
                                        "id": 8129,
                                        "name": "IndexAccess",
                                        "src": "1043:9:61"
                                      }
                                    ],
                                    "id": 8130,
                                    "name": "FunctionCall",
                                    "src": "902:164:61"
                                  }
                                ],
                                "id": 8131,
                                "name": "Assignment",
                                "src": "887:179:61"
                              }
                            ],
                            "id": 8132,
                            "name": "ExpressionStatement",
                            "src": "887:179:61"
                          }
                        ],
                        "id": 8133,
                        "name": "Block",
                        "src": "873:204:61"
                      }
                    ],
                    "id": 8134,
                    "name": "ForStatement",
                    "src": "837:240:61"
                  }
                ],
                "id": 8135,
                "name": "Block",
                "src": "791:292:61"
              }
            ],
            "id": 8136,
            "name": "FunctionDefinition",
            "src": "582:501:61"
          },
          {
            "attributes": {
              "baseFunctions": [
                5366
              ],
              "documentation": null,
              "functionSelector": "0862d12f",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "name": "swapExactInputForOutput",
              "scope": 8571,
              "stateMutability": "nonpayable",
              "virtual": false,
              "visibility": "external"
            },
            "children": [
              {
                "attributes": {
                  "overrides": [
                    null
                  ]
                },
                "id": 8155,
                "name": "OverrideSpecifier",
                "src": "1342:8:61"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "path",
                      "overrides": null,
                      "scope": 8322,
                      "stateVariable": false,
                      "storageLocation": "calldata",
                      "type": "address[]",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "length": null,
                          "type": "address[]"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "address",
                              "stateMutability": "nonpayable",
                              "type": "address"
                            },
                            "id": 8137,
                            "name": "ElementaryTypeName",
                            "src": "1131:7:61"
                          }
                        ],
                        "id": 8138,
                        "name": "ArrayTypeName",
                        "src": "1131:9:61"
                      }
                    ],
                    "id": 8139,
                    "name": "VariableDeclaration",
                    "src": "1131:23:61"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "pairs",
                      "overrides": null,
                      "scope": 8322,
                      "stateVariable": false,
                      "storageLocation": "calldata",
                      "type": "address[]",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "length": null,
                          "type": "address[]"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "address",
                              "stateMutability": "nonpayable",
                              "type": "address"
                            },
                            "id": 8140,
                            "name": "ElementaryTypeName",
                            "src": "1164:7:61"
                          }
                        ],
                        "id": 8141,
                        "name": "ArrayTypeName",
                        "src": "1164:9:61"
                      }
                    ],
                    "id": 8142,
                    "name": "VariableDeclaration",
                    "src": "1164:24:61"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "extras",
                      "overrides": null,
                      "scope": 8322,
                      "stateVariable": false,
                      "storageLocation": "calldata",
                      "type": "bytes[]",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "length": null,
                          "type": "bytes[]"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "bytes",
                              "type": "bytes"
                            },
                            "id": 8143,
                            "name": "ElementaryTypeName",
                            "src": "1198:5:61"
                          }
                        ],
                        "id": 8144,
                        "name": "ArrayTypeName",
                        "src": "1198:7:61"
                      }
                    ],
                    "id": 8145,
                    "name": "VariableDeclaration",
                    "src": "1198:23:61"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "inputAmount",
                      "overrides": null,
                      "scope": 8322,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 8146,
                        "name": "ElementaryTypeName",
                        "src": "1231:7:61"
                      }
                    ],
                    "id": 8147,
                    "name": "VariableDeclaration",
                    "src": "1231:19:61"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "minOutputAmount",
                      "overrides": null,
                      "scope": 8322,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 8148,
                        "name": "ElementaryTypeName",
                        "src": "1260:7:61"
                      }
                    ],
                    "id": 8149,
                    "name": "VariableDeclaration",
                    "src": "1260:23:61"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "to",
                      "overrides": null,
                      "scope": 8322,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 8150,
                        "name": "ElementaryTypeName",
                        "src": "1293:7:61"
                      }
                    ],
                    "id": 8151,
                    "name": "VariableDeclaration",
                    "src": "1293:10:61"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "deadline",
                      "overrides": null,
                      "scope": 8322,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint",
                          "type": "uint256"
                        },
                        "id": 8152,
                        "name": "ElementaryTypeName",
                        "src": "1313:4:61"
                      }
                    ],
                    "id": 8153,
                    "name": "VariableDeclaration",
                    "src": "1313:13:61"
                  }
                ],
                "id": 8154,
                "name": "ParameterList",
                "src": "1121:211:61"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "outputAmount",
                      "overrides": null,
                      "scope": 8322,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 8159,
                        "name": "ElementaryTypeName",
                        "src": "1377:7:61"
                      }
                    ],
                    "id": 8160,
                    "name": "VariableDeclaration",
                    "src": "1377:20:61"
                  }
                ],
                "id": 8161,
                "name": "ParameterList",
                "src": "1376:22:61"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 8080,
                      "type": "modifier (uint256)",
                      "value": "ensure"
                    },
                    "id": 8156,
                    "name": "Identifier",
                    "src": "1351:6:61"
                  },
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 8153,
                      "type": "uint256",
                      "value": "deadline"
                    },
                    "id": 8157,
                    "name": "Identifier",
                    "src": "1358:8:61"
                  }
                ],
                "id": 8158,
                "name": "ModifierInvocation",
                "src": "1351:16:61"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_cbc4675579917e5fda45a353d444f0d37d533038808e91996b46a0da5ca80931",
                                  "typeString": "literal_string \"SwappaRouter: Path and Pairs mismatch!\""
                                }
                              ],
                              "overloadedDeclarations": [
                                -18,
                                -18
                              ],
                              "referencedDeclaration": -18,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 8162,
                            "name": "Identifier",
                            "src": "1409:7:61"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "==",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "length",
                                  "referencedDeclaration": null,
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 8139,
                                      "type": "address[] calldata",
                                      "value": "path"
                                    },
                                    "id": 8163,
                                    "name": "Identifier",
                                    "src": "1430:4:61"
                                  }
                                ],
                                "id": 8164,
                                "name": "MemberAccess",
                                "src": "1430:11:61"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "+",
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "length",
                                      "referencedDeclaration": null,
                                      "type": "uint256"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 8142,
                                          "type": "address[] calldata",
                                          "value": "pairs"
                                        },
                                        "id": 8165,
                                        "name": "Identifier",
                                        "src": "1445:5:61"
                                      }
                                    ],
                                    "id": 8166,
                                    "name": "MemberAccess",
                                    "src": "1445:12:61"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "hexvalue": "31",
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "subdenomination": null,
                                      "token": "number",
                                      "type": "int_const 1",
                                      "value": "1"
                                    },
                                    "id": 8167,
                                    "name": "Literal",
                                    "src": "1460:1:61"
                                  }
                                ],
                                "id": 8168,
                                "name": "BinaryOperation",
                                "src": "1445:16:61"
                              }
                            ],
                            "id": 8169,
                            "name": "BinaryOperation",
                            "src": "1430:31:61"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "537761707061526f757465723a205061746820616e64205061697273206d69736d6174636821",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "string",
                              "type": "literal_string \"SwappaRouter: Path and Pairs mismatch!\"",
                              "value": "SwappaRouter: Path and Pairs mismatch!"
                            },
                            "id": 8170,
                            "name": "Literal",
                            "src": "1475:40:61"
                          }
                        ],
                        "id": 8171,
                        "name": "FunctionCall",
                        "src": "1409:116:61"
                      }
                    ],
                    "id": 8172,
                    "name": "ExpressionStatement",
                    "src": "1409:116:61"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_aa79a2f1b8ccadf65acf1e8a1304938ec50b5c0614873c30a77bee5848d93d9a",
                                  "typeString": "literal_string \"SwappaRouter: Pairs and Extras mismatch!\""
                                }
                              ],
                              "overloadedDeclarations": [
                                -18,
                                -18
                              ],
                              "referencedDeclaration": -18,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 8173,
                            "name": "Identifier",
                            "src": "1535:7:61"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "==",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "length",
                                  "referencedDeclaration": null,
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 8142,
                                      "type": "address[] calldata",
                                      "value": "pairs"
                                    },
                                    "id": 8174,
                                    "name": "Identifier",
                                    "src": "1556:5:61"
                                  }
                                ],
                                "id": 8175,
                                "name": "MemberAccess",
                                "src": "1556:12:61"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "length",
                                  "referencedDeclaration": null,
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 8145,
                                      "type": "bytes calldata[] calldata",
                                      "value": "extras"
                                    },
                                    "id": 8176,
                                    "name": "Identifier",
                                    "src": "1572:6:61"
                                  }
                                ],
                                "id": 8177,
                                "name": "MemberAccess",
                                "src": "1572:13:61"
                              }
                            ],
                            "id": 8178,
                            "name": "BinaryOperation",
                            "src": "1556:29:61"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "537761707061526f757465723a20506169727320616e6420457874726173206d69736d6174636821",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "string",
                              "type": "literal_string \"SwappaRouter: Pairs and Extras mismatch!\"",
                              "value": "SwappaRouter: Pairs and Extras mismatch!"
                            },
                            "id": 8179,
                            "name": "Literal",
                            "src": "1599:42:61"
                          }
                        ],
                        "id": 8180,
                        "name": "FunctionCall",
                        "src": "1535:116:61"
                      }
                    ],
                    "id": 8181,
                    "name": "ExpressionStatement",
                    "src": "1535:116:61"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_50f8820bfeecb849a00cbe9e7b54a6b373cb7c22aa55809a32600c36edb64fa6",
                                  "typeString": "literal_string \"SwappaRouter: Must have at least one pair!\""
                                }
                              ],
                              "overloadedDeclarations": [
                                -18,
                                -18
                              ],
                              "referencedDeclaration": -18,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 8182,
                            "name": "Identifier",
                            "src": "1661:7:61"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": ">",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "length",
                                  "referencedDeclaration": null,
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 8142,
                                      "type": "address[] calldata",
                                      "value": "pairs"
                                    },
                                    "id": 8183,
                                    "name": "Identifier",
                                    "src": "1669:5:61"
                                  }
                                ],
                                "id": 8184,
                                "name": "MemberAccess",
                                "src": "1669:12:61"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "hexvalue": "30",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "subdenomination": null,
                                  "token": "number",
                                  "type": "int_const 0",
                                  "value": "0"
                                },
                                "id": 8185,
                                "name": "Literal",
                                "src": "1684:1:61"
                              }
                            ],
                            "id": 8186,
                            "name": "BinaryOperation",
                            "src": "1669:16:61"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "537761707061526f757465723a204d7573742068617665206174206c65617374206f6e65207061697221",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "string",
                              "type": "literal_string \"SwappaRouter: Must have at least one pair!\"",
                              "value": "SwappaRouter: Must have at least one pair!"
                            },
                            "id": 8187,
                            "name": "Literal",
                            "src": "1687:44:61"
                          }
                        ],
                        "id": 8188,
                        "name": "FunctionCall",
                        "src": "1661:71:61"
                      }
                    ],
                    "id": 8189,
                    "name": "ExpressionStatement",
                    "src": "1661:71:61"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_5d4db394429342c290de88dc1012d1383b0e08cbeb120c2513f7aad8def9fc3d",
                                  "typeString": "literal_string \"SwappaRouter: Initial transferFrom failed!\""
                                }
                              ],
                              "overloadedDeclarations": [
                                -18,
                                -18
                              ],
                              "referencedDeclaration": -18,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 8190,
                            "name": "Identifier",
                            "src": "1743:7:61"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "bool",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address_payable",
                                      "typeString": "address payable"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "transferFrom",
                                  "referencedDeclaration": 423,
                                  "type": "function (address,address,uint256) external returns (bool)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "isStructConstructorCall": false,
                                      "lValueRequested": false,
                                      "names": [
                                        null
                                      ],
                                      "tryCall": false,
                                      "type": "contract ERC20",
                                      "type_conversion": true
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            }
                                          ],
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 725,
                                          "type": "type(contract ERC20)",
                                          "value": "ERC20"
                                        },
                                        "id": 8191,
                                        "name": "Identifier",
                                        "src": "1764:5:61"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "type": "address"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 8139,
                                              "type": "address[] calldata",
                                              "value": "path"
                                            },
                                            "id": 8192,
                                            "name": "Identifier",
                                            "src": "1770:4:61"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "hexvalue": "30",
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "lValueRequested": false,
                                              "subdenomination": null,
                                              "token": "number",
                                              "type": "int_const 0",
                                              "value": "0"
                                            },
                                            "id": 8193,
                                            "name": "Literal",
                                            "src": "1775:1:61"
                                          }
                                        ],
                                        "id": 8194,
                                        "name": "IndexAccess",
                                        "src": "1770:7:61"
                                      }
                                    ],
                                    "id": 8195,
                                    "name": "FunctionCall",
                                    "src": "1764:14:61"
                                  }
                                ],
                                "id": 8196,
                                "name": "MemberAccess",
                                "src": "1764:27:61"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "sender",
                                  "referencedDeclaration": null,
                                  "type": "address payable"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": -15,
                                      "type": "msg",
                                      "value": "msg"
                                    },
                                    "id": 8197,
                                    "name": "Identifier",
                                    "src": "1792:3:61"
                                  }
                                ],
                                "id": 8198,
                                "name": "MemberAccess",
                                "src": "1792:10:61"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "type": "address"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 8142,
                                      "type": "address[] calldata",
                                      "value": "pairs"
                                    },
                                    "id": 8199,
                                    "name": "Identifier",
                                    "src": "1804:5:61"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "hexvalue": "30",
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "subdenomination": null,
                                      "token": "number",
                                      "type": "int_const 0",
                                      "value": "0"
                                    },
                                    "id": 8200,
                                    "name": "Literal",
                                    "src": "1810:1:61"
                                  }
                                ],
                                "id": 8201,
                                "name": "IndexAccess",
                                "src": "1804:8:61"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 8147,
                                  "type": "uint256",
                                  "value": "inputAmount"
                                },
                                "id": 8202,
                                "name": "Identifier",
                                "src": "1814:11:61"
                              }
                            ],
                            "id": 8203,
                            "name": "FunctionCall",
                            "src": "1764:62:61"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "537761707061526f757465723a20496e697469616c207472616e7366657246726f6d206661696c656421",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "string",
                              "type": "literal_string \"SwappaRouter: Initial transferFrom failed!\"",
                              "value": "SwappaRouter: Initial transferFrom failed!"
                            },
                            "id": 8204,
                            "name": "Literal",
                            "src": "1840:44:61"
                          }
                        ],
                        "id": 8205,
                        "name": "FunctionCall",
                        "src": "1743:151:61"
                      }
                    ],
                    "id": 8206,
                    "name": "ExpressionStatement",
                    "src": "1743:151:61"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "assignments": [
                            8208
                          ],
                          "initialValue": null
                        },
                        "children": [
                          {
                            "attributes": {
                              "constant": false,
                              "mutability": "mutable",
                              "name": "i",
                              "overrides": null,
                              "scope": 8269,
                              "stateVariable": false,
                              "storageLocation": "default",
                              "type": "uint256",
                              "value": null,
                              "visibility": "internal"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "name": "uint",
                                  "type": "uint256"
                                },
                                "id": 8207,
                                "name": "ElementaryTypeName",
                                "src": "1909:4:61"
                              }
                            ],
                            "id": 8208,
                            "name": "VariableDeclaration",
                            "src": "1909:6:61"
                          }
                        ],
                        "id": 8209,
                        "name": "VariableDeclarationStatement",
                        "src": "1909:6:61"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "<",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 8208,
                              "type": "uint256",
                              "value": "i"
                            },
                            "id": 8210,
                            "name": "Identifier",
                            "src": "1917:1:61"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "length",
                              "referencedDeclaration": null,
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 8142,
                                  "type": "address[] calldata",
                                  "value": "pairs"
                                },
                                "id": 8211,
                                "name": "Identifier",
                                "src": "1921:5:61"
                              }
                            ],
                            "id": 8212,
                            "name": "MemberAccess",
                            "src": "1921:12:61"
                          }
                        ],
                        "id": 8213,
                        "name": "BinaryOperation",
                        "src": "1917:16:61"
                      },
                      {
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "++",
                              "prefix": false,
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 8208,
                                  "type": "uint256",
                                  "value": "i"
                                },
                                "id": 8214,
                                "name": "Identifier",
                                "src": "1935:1:61"
                              }
                            ],
                            "id": 8215,
                            "name": "UnaryOperation",
                            "src": "1935:3:61"
                          }
                        ],
                        "id": 8216,
                        "name": "ExpressionStatement",
                        "src": "1935:3:61"
                      },
                      {
                        "children": [
                          {
                            "attributes": {
                              "assignments": [
                                8218,
                                8220
                              ]
                            },
                            "children": [
                              {
                                "attributes": {
                                  "constant": false,
                                  "mutability": "mutable",
                                  "name": "pairInput",
                                  "overrides": null,
                                  "scope": 8268,
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "type": "address",
                                  "value": null,
                                  "visibility": "internal"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "name": "address",
                                      "stateMutability": "nonpayable",
                                      "type": "address"
                                    },
                                    "id": 8217,
                                    "name": "ElementaryTypeName",
                                    "src": "1955:7:61"
                                  }
                                ],
                                "id": 8218,
                                "name": "VariableDeclaration",
                                "src": "1955:17:61"
                              },
                              {
                                "attributes": {
                                  "constant": false,
                                  "mutability": "mutable",
                                  "name": "pairOutput",
                                  "overrides": null,
                                  "scope": 8268,
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "type": "address",
                                  "value": null,
                                  "visibility": "internal"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "name": "address",
                                      "stateMutability": "nonpayable",
                                      "type": "address"
                                    },
                                    "id": 8219,
                                    "name": "ElementaryTypeName",
                                    "src": "1974:7:61"
                                  }
                                ],
                                "id": 8220,
                                "name": "VariableDeclaration",
                                "src": "1974:18:61"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "type": "tuple(address,address)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "type": "address"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 8139,
                                          "type": "address[] calldata",
                                          "value": "path"
                                        },
                                        "id": 8221,
                                        "name": "Identifier",
                                        "src": "1997:4:61"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 8208,
                                          "type": "uint256",
                                          "value": "i"
                                        },
                                        "id": 8222,
                                        "name": "Identifier",
                                        "src": "2002:1:61"
                                      }
                                    ],
                                    "id": 8223,
                                    "name": "IndexAccess",
                                    "src": "1997:7:61"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "type": "address"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 8139,
                                          "type": "address[] calldata",
                                          "value": "path"
                                        },
                                        "id": 8224,
                                        "name": "Identifier",
                                        "src": "2006:4:61"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "operator": "+",
                                          "type": "uint256"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 8208,
                                              "type": "uint256",
                                              "value": "i"
                                            },
                                            "id": 8225,
                                            "name": "Identifier",
                                            "src": "2011:1:61"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "hexvalue": "31",
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "lValueRequested": false,
                                              "subdenomination": null,
                                              "token": "number",
                                              "type": "int_const 1",
                                              "value": "1"
                                            },
                                            "id": 8226,
                                            "name": "Literal",
                                            "src": "2015:1:61"
                                          }
                                        ],
                                        "id": 8227,
                                        "name": "BinaryOperation",
                                        "src": "2011:5:61"
                                      }
                                    ],
                                    "id": 8228,
                                    "name": "IndexAccess",
                                    "src": "2006:11:61"
                                  }
                                ],
                                "id": 8229,
                                "name": "TupleExpression",
                                "src": "1996:22:61"
                              }
                            ],
                            "id": 8230,
                            "name": "VariableDeclarationStatement",
                            "src": "1954:64:61"
                          },
                          {
                            "attributes": {
                              "assignments": [
                                8232
                              ]
                            },
                            "children": [
                              {
                                "attributes": {
                                  "constant": false,
                                  "mutability": "mutable",
                                  "name": "next",
                                  "overrides": null,
                                  "scope": 8268,
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "type": "address",
                                  "value": null,
                                  "visibility": "internal"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "name": "address",
                                      "stateMutability": "nonpayable",
                                      "type": "address"
                                    },
                                    "id": 8231,
                                    "name": "ElementaryTypeName",
                                    "src": "2032:7:61"
                                  }
                                ],
                                "id": 8232,
                                "name": "VariableDeclaration",
                                "src": "2032:12:61"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "type": "address"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "operator": "<",
                                      "type": "bool"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 8208,
                                          "type": "uint256",
                                          "value": "i"
                                        },
                                        "id": 8233,
                                        "name": "Identifier",
                                        "src": "2047:1:61"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "operator": "-",
                                          "type": "uint256"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "member_name": "length",
                                              "referencedDeclaration": null,
                                              "type": "uint256"
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "overloadedDeclarations": [
                                                    null
                                                  ],
                                                  "referencedDeclaration": 8142,
                                                  "type": "address[] calldata",
                                                  "value": "pairs"
                                                },
                                                "id": 8234,
                                                "name": "Identifier",
                                                "src": "2051:5:61"
                                              }
                                            ],
                                            "id": 8235,
                                            "name": "MemberAccess",
                                            "src": "2051:12:61"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "hexvalue": "31",
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "lValueRequested": false,
                                              "subdenomination": null,
                                              "token": "number",
                                              "type": "int_const 1",
                                              "value": "1"
                                            },
                                            "id": 8236,
                                            "name": "Literal",
                                            "src": "2066:1:61"
                                          }
                                        ],
                                        "id": 8237,
                                        "name": "BinaryOperation",
                                        "src": "2051:16:61"
                                      }
                                    ],
                                    "id": 8238,
                                    "name": "BinaryOperation",
                                    "src": "2047:20:61"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "type": "address"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 8142,
                                          "type": "address[] calldata",
                                          "value": "pairs"
                                        },
                                        "id": 8239,
                                        "name": "Identifier",
                                        "src": "2070:5:61"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "operator": "+",
                                          "type": "uint256"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 8208,
                                              "type": "uint256",
                                              "value": "i"
                                            },
                                            "id": 8240,
                                            "name": "Identifier",
                                            "src": "2076:1:61"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "hexvalue": "31",
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "lValueRequested": false,
                                              "subdenomination": null,
                                              "token": "number",
                                              "type": "int_const 1",
                                              "value": "1"
                                            },
                                            "id": 8241,
                                            "name": "Literal",
                                            "src": "2080:1:61"
                                          }
                                        ],
                                        "id": 8242,
                                        "name": "BinaryOperation",
                                        "src": "2076:5:61"
                                      }
                                    ],
                                    "id": 8243,
                                    "name": "IndexAccess",
                                    "src": "2070:12:61"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "isStructConstructorCall": false,
                                      "lValueRequested": false,
                                      "names": [
                                        null
                                      ],
                                      "tryCall": false,
                                      "type": "address payable",
                                      "type_conversion": true
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_contract$_SwappaRouterV1_$8571",
                                              "typeString": "contract SwappaRouterV1"
                                            }
                                          ],
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "type": "type(address)"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "name": "address",
                                              "type": null
                                            },
                                            "id": 8244,
                                            "name": "ElementaryTypeName",
                                            "src": "2085:7:61"
                                          }
                                        ],
                                        "id": 8245,
                                        "name": "ElementaryTypeNameExpression",
                                        "src": "2085:7:61"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": -28,
                                          "type": "contract SwappaRouterV1",
                                          "value": "this"
                                        },
                                        "id": 8246,
                                        "name": "Identifier",
                                        "src": "2093:4:61"
                                      }
                                    ],
                                    "id": 8247,
                                    "name": "FunctionCall",
                                    "src": "2085:13:61"
                                  }
                                ],
                                "id": 8248,
                                "name": "Conditional",
                                "src": "2047:51:61"
                              }
                            ],
                            "id": 8249,
                            "name": "VariableDeclarationStatement",
                            "src": "2032:66:61"
                          },
                          {
                            "attributes": {
                              "assignments": [
                                8251
                              ]
                            },
                            "children": [
                              {
                                "attributes": {
                                  "constant": false,
                                  "mutability": "mutable",
                                  "name": "data",
                                  "overrides": null,
                                  "scope": 8268,
                                  "stateVariable": false,
                                  "storageLocation": "memory",
                                  "type": "bytes",
                                  "value": null,
                                  "visibility": "internal"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "name": "bytes",
                                      "type": "bytes"
                                    },
                                    "id": 8250,
                                    "name": "ElementaryTypeName",
                                    "src": "2112:5:61"
                                  }
                                ],
                                "id": 8251,
                                "name": "VariableDeclaration",
                                "src": "2112:17:61"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "type": "bytes calldata"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 8145,
                                      "type": "bytes calldata[] calldata",
                                      "value": "extras"
                                    },
                                    "id": 8252,
                                    "name": "Identifier",
                                    "src": "2132:6:61"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 8208,
                                      "type": "uint256",
                                      "value": "i"
                                    },
                                    "id": 8253,
                                    "name": "Identifier",
                                    "src": "2139:1:61"
                                  }
                                ],
                                "id": 8254,
                                "name": "IndexAccess",
                                "src": "2132:9:61"
                              }
                            ],
                            "id": 8255,
                            "name": "VariableDeclarationStatement",
                            "src": "2112:29:61"
                          },
                          {
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "tryCall": false,
                                  "type": "tuple()",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        },
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        },
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        },
                                        {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes memory"
                                        }
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "swap",
                                      "referencedDeclaration": 5311,
                                      "type": "function (address,address,address,bytes memory) external"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "isStructConstructorCall": false,
                                          "lValueRequested": false,
                                          "names": [
                                            null
                                          ],
                                          "tryCall": false,
                                          "type": "contract ISwappaPairV1",
                                          "type_conversion": true
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": [
                                                {
                                                  "typeIdentifier": "t_address",
                                                  "typeString": "address"
                                                }
                                              ],
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 5325,
                                              "type": "type(contract ISwappaPairV1)",
                                              "value": "ISwappaPairV1"
                                            },
                                            "id": 8256,
                                            "name": "Identifier",
                                            "src": "2155:13:61"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "type": "address"
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "overloadedDeclarations": [
                                                    null
                                                  ],
                                                  "referencedDeclaration": 8142,
                                                  "type": "address[] calldata",
                                                  "value": "pairs"
                                                },
                                                "id": 8257,
                                                "name": "Identifier",
                                                "src": "2169:5:61"
                                              },
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "overloadedDeclarations": [
                                                    null
                                                  ],
                                                  "referencedDeclaration": 8208,
                                                  "type": "uint256",
                                                  "value": "i"
                                                },
                                                "id": 8258,
                                                "name": "Identifier",
                                                "src": "2175:1:61"
                                              }
                                            ],
                                            "id": 8259,
                                            "name": "IndexAccess",
                                            "src": "2169:8:61"
                                          }
                                        ],
                                        "id": 8260,
                                        "name": "FunctionCall",
                                        "src": "2155:23:61"
                                      }
                                    ],
                                    "id": 8261,
                                    "name": "MemberAccess",
                                    "src": "2155:28:61"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 8218,
                                      "type": "address",
                                      "value": "pairInput"
                                    },
                                    "id": 8262,
                                    "name": "Identifier",
                                    "src": "2184:9:61"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 8220,
                                      "type": "address",
                                      "value": "pairOutput"
                                    },
                                    "id": 8263,
                                    "name": "Identifier",
                                    "src": "2195:10:61"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 8232,
                                      "type": "address",
                                      "value": "next"
                                    },
                                    "id": 8264,
                                    "name": "Identifier",
                                    "src": "2207:4:61"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 8251,
                                      "type": "bytes memory",
                                      "value": "data"
                                    },
                                    "id": 8265,
                                    "name": "Identifier",
                                    "src": "2213:4:61"
                                  }
                                ],
                                "id": 8266,
                                "name": "FunctionCall",
                                "src": "2155:63:61"
                              }
                            ],
                            "id": 8267,
                            "name": "ExpressionStatement",
                            "src": "2155:63:61"
                          }
                        ],
                        "id": 8268,
                        "name": "Block",
                        "src": "1940:289:61"
                      }
                    ],
                    "id": 8269,
                    "name": "ForStatement",
                    "src": "1904:325:61"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        8271
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "output",
                          "overrides": null,
                          "scope": 8321,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "address",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "address",
                              "stateMutability": "nonpayable",
                              "type": "address"
                            },
                            "id": 8270,
                            "name": "ElementaryTypeName",
                            "src": "2390:7:61"
                          }
                        ],
                        "id": 8271,
                        "name": "VariableDeclaration",
                        "src": "2390:14:61"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "type": "address"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 8139,
                              "type": "address[] calldata",
                              "value": "path"
                            },
                            "id": 8272,
                            "name": "Identifier",
                            "src": "2407:4:61"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "-",
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "length",
                                  "referencedDeclaration": null,
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 8139,
                                      "type": "address[] calldata",
                                      "value": "path"
                                    },
                                    "id": 8273,
                                    "name": "Identifier",
                                    "src": "2412:4:61"
                                  }
                                ],
                                "id": 8274,
                                "name": "MemberAccess",
                                "src": "2412:11:61"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "hexvalue": "31",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "subdenomination": null,
                                  "token": "number",
                                  "type": "int_const 1",
                                  "value": "1"
                                },
                                "id": 8275,
                                "name": "Literal",
                                "src": "2426:1:61"
                              }
                            ],
                            "id": 8276,
                            "name": "BinaryOperation",
                            "src": "2412:15:61"
                          }
                        ],
                        "id": 8277,
                        "name": "IndexAccess",
                        "src": "2407:21:61"
                      }
                    ],
                    "id": 8278,
                    "name": "VariableDeclarationStatement",
                    "src": "2390:38:61"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "uint256"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 8160,
                              "type": "uint256",
                              "value": "outputAmount"
                            },
                            "id": 8279,
                            "name": "Identifier",
                            "src": "2438:12:61"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "uint256",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address_payable",
                                      "typeString": "address payable"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "balanceOf",
                                  "referencedDeclaration": 325,
                                  "type": "function (address) view external returns (uint256)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "isStructConstructorCall": false,
                                      "lValueRequested": false,
                                      "names": [
                                        null
                                      ],
                                      "tryCall": false,
                                      "type": "contract ERC20",
                                      "type_conversion": true
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            }
                                          ],
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 725,
                                          "type": "type(contract ERC20)",
                                          "value": "ERC20"
                                        },
                                        "id": 8280,
                                        "name": "Identifier",
                                        "src": "2453:5:61"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 8271,
                                          "type": "address",
                                          "value": "output"
                                        },
                                        "id": 8281,
                                        "name": "Identifier",
                                        "src": "2459:6:61"
                                      }
                                    ],
                                    "id": 8282,
                                    "name": "FunctionCall",
                                    "src": "2453:13:61"
                                  }
                                ],
                                "id": 8283,
                                "name": "MemberAccess",
                                "src": "2453:23:61"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "tryCall": false,
                                  "type": "address payable",
                                  "type_conversion": true
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_contract$_SwappaRouterV1_$8571",
                                          "typeString": "contract SwappaRouterV1"
                                        }
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "type": "type(address)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "name": "address",
                                          "type": null
                                        },
                                        "id": 8284,
                                        "name": "ElementaryTypeName",
                                        "src": "2477:7:61"
                                      }
                                    ],
                                    "id": 8285,
                                    "name": "ElementaryTypeNameExpression",
                                    "src": "2477:7:61"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": -28,
                                      "type": "contract SwappaRouterV1",
                                      "value": "this"
                                    },
                                    "id": 8286,
                                    "name": "Identifier",
                                    "src": "2485:4:61"
                                  }
                                ],
                                "id": 8287,
                                "name": "FunctionCall",
                                "src": "2477:13:61"
                              }
                            ],
                            "id": 8288,
                            "name": "FunctionCall",
                            "src": "2453:38:61"
                          }
                        ],
                        "id": 8289,
                        "name": "Assignment",
                        "src": "2438:53:61"
                      }
                    ],
                    "id": 8290,
                    "name": "ExpressionStatement",
                    "src": "2438:53:61"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_cefd04d9f158c54476d457b22a80719a9743d5a6e0418466da4fa21996dd4acf",
                                  "typeString": "literal_string \"SwappaRouter: Insufficient output amount!\""
                                }
                              ],
                              "overloadedDeclarations": [
                                -18,
                                -18
                              ],
                              "referencedDeclaration": -18,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 8291,
                            "name": "Identifier",
                            "src": "2501:7:61"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": ">=",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 8160,
                                  "type": "uint256",
                                  "value": "outputAmount"
                                },
                                "id": 8292,
                                "name": "Identifier",
                                "src": "2522:12:61"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 8149,
                                  "type": "uint256",
                                  "value": "minOutputAmount"
                                },
                                "id": 8293,
                                "name": "Identifier",
                                "src": "2538:15:61"
                              }
                            ],
                            "id": 8294,
                            "name": "BinaryOperation",
                            "src": "2522:31:61"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "537761707061526f757465723a20496e73756666696369656e74206f757470757420616d6f756e7421",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "string",
                              "type": "literal_string \"SwappaRouter: Insufficient output amount!\"",
                              "value": "SwappaRouter: Insufficient output amount!"
                            },
                            "id": 8295,
                            "name": "Literal",
                            "src": "2567:43:61"
                          }
                        ],
                        "id": 8296,
                        "name": "FunctionCall",
                        "src": "2501:119:61"
                      }
                    ],
                    "id": 8297,
                    "name": "ExpressionStatement",
                    "src": "2501:119:61"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_9adfc36c8bf82468d0028ce6cfdb8f1360397ed2f3915c2f2b40899f5aface4f",
                                  "typeString": "literal_string \"SwappaRouter: Final transfer failed!\""
                                }
                              ],
                              "overloadedDeclarations": [
                                -18,
                                -18
                              ],
                              "referencedDeclaration": -18,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 8298,
                            "name": "Identifier",
                            "src": "2630:7:61"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "bool",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "transfer",
                                  "referencedDeclaration": 346,
                                  "type": "function (address,uint256) external returns (bool)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "isStructConstructorCall": false,
                                      "lValueRequested": false,
                                      "names": [
                                        null
                                      ],
                                      "tryCall": false,
                                      "type": "contract ERC20",
                                      "type_conversion": true
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            }
                                          ],
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 725,
                                          "type": "type(contract ERC20)",
                                          "value": "ERC20"
                                        },
                                        "id": 8299,
                                        "name": "Identifier",
                                        "src": "2651:5:61"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 8271,
                                          "type": "address",
                                          "value": "output"
                                        },
                                        "id": 8300,
                                        "name": "Identifier",
                                        "src": "2657:6:61"
                                      }
                                    ],
                                    "id": 8301,
                                    "name": "FunctionCall",
                                    "src": "2651:13:61"
                                  }
                                ],
                                "id": 8302,
                                "name": "MemberAccess",
                                "src": "2651:22:61"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 8151,
                                  "type": "address",
                                  "value": "to"
                                },
                                "id": 8303,
                                "name": "Identifier",
                                "src": "2674:2:61"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 8160,
                                  "type": "uint256",
                                  "value": "outputAmount"
                                },
                                "id": 8304,
                                "name": "Identifier",
                                "src": "2678:12:61"
                              }
                            ],
                            "id": 8305,
                            "name": "FunctionCall",
                            "src": "2651:40:61"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "537761707061526f757465723a2046696e616c207472616e73666572206661696c656421",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "string",
                              "type": "literal_string \"SwappaRouter: Final transfer failed!\"",
                              "value": "SwappaRouter: Final transfer failed!"
                            },
                            "id": 8306,
                            "name": "Literal",
                            "src": "2705:38:61"
                          }
                        ],
                        "id": 8307,
                        "name": "FunctionCall",
                        "src": "2630:123:61"
                      }
                    ],
                    "id": 8308,
                    "name": "ExpressionStatement",
                    "src": "2630:123:61"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 8066,
                              "type": "function (address,address,address,address,uint256,uint256)",
                              "value": "Swap"
                            },
                            "id": 8309,
                            "name": "Identifier",
                            "src": "2768:4:61"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "sender",
                              "referencedDeclaration": null,
                              "type": "address payable"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": -15,
                                  "type": "msg",
                                  "value": "msg"
                                },
                                "id": 8310,
                                "name": "Identifier",
                                "src": "2773:3:61"
                              }
                            ],
                            "id": 8311,
                            "name": "MemberAccess",
                            "src": "2773:10:61"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 8151,
                              "type": "address",
                              "value": "to"
                            },
                            "id": 8312,
                            "name": "Identifier",
                            "src": "2785:2:61"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "type": "address"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 8139,
                                  "type": "address[] calldata",
                                  "value": "path"
                                },
                                "id": 8313,
                                "name": "Identifier",
                                "src": "2789:4:61"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "hexvalue": "30",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "subdenomination": null,
                                  "token": "number",
                                  "type": "int_const 0",
                                  "value": "0"
                                },
                                "id": 8314,
                                "name": "Literal",
                                "src": "2794:1:61"
                              }
                            ],
                            "id": 8315,
                            "name": "IndexAccess",
                            "src": "2789:7:61"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 8271,
                              "type": "address",
                              "value": "output"
                            },
                            "id": 8316,
                            "name": "Identifier",
                            "src": "2798:6:61"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 8147,
                              "type": "uint256",
                              "value": "inputAmount"
                            },
                            "id": 8317,
                            "name": "Identifier",
                            "src": "2806:11:61"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 8160,
                              "type": "uint256",
                              "value": "outputAmount"
                            },
                            "id": 8318,
                            "name": "Identifier",
                            "src": "2819:12:61"
                          }
                        ],
                        "id": 8319,
                        "name": "FunctionCall",
                        "src": "2768:64:61"
                      }
                    ],
                    "id": 8320,
                    "name": "EmitStatement",
                    "src": "2763:69:61"
                  }
                ],
                "id": 8321,
                "name": "Block",
                "src": "1399:1440:61"
              }
            ],
            "id": 8322,
            "name": "FunctionDefinition",
            "src": "1089:1750:61"
          },
          {
            "attributes": {
              "baseFunctions": [
                5388
              ],
              "documentation": null,
              "functionSelector": "adf6fa02",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "name": "swapExactInputForOutputWithPrecheck",
              "scope": 8571,
              "stateMutability": "nonpayable",
              "virtual": false,
              "visibility": "external"
            },
            "children": [
              {
                "attributes": {
                  "overrides": [
                    null
                  ]
                },
                "id": 8341,
                "name": "OverrideSpecifier",
                "src": "3110:8:61"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "path",
                      "overrides": null,
                      "scope": 8566,
                      "stateVariable": false,
                      "storageLocation": "calldata",
                      "type": "address[]",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "length": null,
                          "type": "address[]"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "address",
                              "stateMutability": "nonpayable",
                              "type": "address"
                            },
                            "id": 8323,
                            "name": "ElementaryTypeName",
                            "src": "2899:7:61"
                          }
                        ],
                        "id": 8324,
                        "name": "ArrayTypeName",
                        "src": "2899:9:61"
                      }
                    ],
                    "id": 8325,
                    "name": "VariableDeclaration",
                    "src": "2899:23:61"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "pairs",
                      "overrides": null,
                      "scope": 8566,
                      "stateVariable": false,
                      "storageLocation": "calldata",
                      "type": "address[]",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "length": null,
                          "type": "address[]"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "address",
                              "stateMutability": "nonpayable",
                              "type": "address"
                            },
                            "id": 8326,
                            "name": "ElementaryTypeName",
                            "src": "2932:7:61"
                          }
                        ],
                        "id": 8327,
                        "name": "ArrayTypeName",
                        "src": "2932:9:61"
                      }
                    ],
                    "id": 8328,
                    "name": "VariableDeclaration",
                    "src": "2932:24:61"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "extras",
                      "overrides": null,
                      "scope": 8566,
                      "stateVariable": false,
                      "storageLocation": "calldata",
                      "type": "bytes[]",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "length": null,
                          "type": "bytes[]"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "bytes",
                              "type": "bytes"
                            },
                            "id": 8329,
                            "name": "ElementaryTypeName",
                            "src": "2966:5:61"
                          }
                        ],
                        "id": 8330,
                        "name": "ArrayTypeName",
                        "src": "2966:7:61"
                      }
                    ],
                    "id": 8331,
                    "name": "VariableDeclaration",
                    "src": "2966:23:61"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "inputAmount",
                      "overrides": null,
                      "scope": 8566,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 8332,
                        "name": "ElementaryTypeName",
                        "src": "2999:7:61"
                      }
                    ],
                    "id": 8333,
                    "name": "VariableDeclaration",
                    "src": "2999:19:61"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "minOutputAmount",
                      "overrides": null,
                      "scope": 8566,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 8334,
                        "name": "ElementaryTypeName",
                        "src": "3028:7:61"
                      }
                    ],
                    "id": 8335,
                    "name": "VariableDeclaration",
                    "src": "3028:23:61"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "to",
                      "overrides": null,
                      "scope": 8566,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 8336,
                        "name": "ElementaryTypeName",
                        "src": "3061:7:61"
                      }
                    ],
                    "id": 8337,
                    "name": "VariableDeclaration",
                    "src": "3061:10:61"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "deadline",
                      "overrides": null,
                      "scope": 8566,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint",
                          "type": "uint256"
                        },
                        "id": 8338,
                        "name": "ElementaryTypeName",
                        "src": "3081:4:61"
                      }
                    ],
                    "id": 8339,
                    "name": "VariableDeclaration",
                    "src": "3081:13:61"
                  }
                ],
                "id": 8340,
                "name": "ParameterList",
                "src": "2889:211:61"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "outputAmount",
                      "overrides": null,
                      "scope": 8566,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 8345,
                        "name": "ElementaryTypeName",
                        "src": "3145:7:61"
                      }
                    ],
                    "id": 8346,
                    "name": "VariableDeclaration",
                    "src": "3145:20:61"
                  }
                ],
                "id": 8347,
                "name": "ParameterList",
                "src": "3144:22:61"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 8080,
                      "type": "modifier (uint256)",
                      "value": "ensure"
                    },
                    "id": 8342,
                    "name": "Identifier",
                    "src": "3119:6:61"
                  },
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 8339,
                      "type": "uint256",
                      "value": "deadline"
                    },
                    "id": 8343,
                    "name": "Identifier",
                    "src": "3126:8:61"
                  }
                ],
                "id": 8344,
                "name": "ModifierInvocation",
                "src": "3119:16:61"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_cbc4675579917e5fda45a353d444f0d37d533038808e91996b46a0da5ca80931",
                                  "typeString": "literal_string \"SwappaRouter: Path and Pairs mismatch!\""
                                }
                              ],
                              "overloadedDeclarations": [
                                -18,
                                -18
                              ],
                              "referencedDeclaration": -18,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 8348,
                            "name": "Identifier",
                            "src": "3177:7:61"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "==",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "length",
                                  "referencedDeclaration": null,
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 8325,
                                      "type": "address[] calldata",
                                      "value": "path"
                                    },
                                    "id": 8349,
                                    "name": "Identifier",
                                    "src": "3198:4:61"
                                  }
                                ],
                                "id": 8350,
                                "name": "MemberAccess",
                                "src": "3198:11:61"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "+",
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "length",
                                      "referencedDeclaration": null,
                                      "type": "uint256"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 8328,
                                          "type": "address[] calldata",
                                          "value": "pairs"
                                        },
                                        "id": 8351,
                                        "name": "Identifier",
                                        "src": "3213:5:61"
                                      }
                                    ],
                                    "id": 8352,
                                    "name": "MemberAccess",
                                    "src": "3213:12:61"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "hexvalue": "31",
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "subdenomination": null,
                                      "token": "number",
                                      "type": "int_const 1",
                                      "value": "1"
                                    },
                                    "id": 8353,
                                    "name": "Literal",
                                    "src": "3228:1:61"
                                  }
                                ],
                                "id": 8354,
                                "name": "BinaryOperation",
                                "src": "3213:16:61"
                              }
                            ],
                            "id": 8355,
                            "name": "BinaryOperation",
                            "src": "3198:31:61"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "537761707061526f757465723a205061746820616e64205061697273206d69736d6174636821",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "string",
                              "type": "literal_string \"SwappaRouter: Path and Pairs mismatch!\"",
                              "value": "SwappaRouter: Path and Pairs mismatch!"
                            },
                            "id": 8356,
                            "name": "Literal",
                            "src": "3243:40:61"
                          }
                        ],
                        "id": 8357,
                        "name": "FunctionCall",
                        "src": "3177:116:61"
                      }
                    ],
                    "id": 8358,
                    "name": "ExpressionStatement",
                    "src": "3177:116:61"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_aa79a2f1b8ccadf65acf1e8a1304938ec50b5c0614873c30a77bee5848d93d9a",
                                  "typeString": "literal_string \"SwappaRouter: Pairs and Extras mismatch!\""
                                }
                              ],
                              "overloadedDeclarations": [
                                -18,
                                -18
                              ],
                              "referencedDeclaration": -18,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 8359,
                            "name": "Identifier",
                            "src": "3303:7:61"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "==",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "length",
                                  "referencedDeclaration": null,
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 8328,
                                      "type": "address[] calldata",
                                      "value": "pairs"
                                    },
                                    "id": 8360,
                                    "name": "Identifier",
                                    "src": "3324:5:61"
                                  }
                                ],
                                "id": 8361,
                                "name": "MemberAccess",
                                "src": "3324:12:61"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "length",
                                  "referencedDeclaration": null,
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 8331,
                                      "type": "bytes calldata[] calldata",
                                      "value": "extras"
                                    },
                                    "id": 8362,
                                    "name": "Identifier",
                                    "src": "3340:6:61"
                                  }
                                ],
                                "id": 8363,
                                "name": "MemberAccess",
                                "src": "3340:13:61"
                              }
                            ],
                            "id": 8364,
                            "name": "BinaryOperation",
                            "src": "3324:29:61"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "537761707061526f757465723a20506169727320616e6420457874726173206d69736d6174636821",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "string",
                              "type": "literal_string \"SwappaRouter: Pairs and Extras mismatch!\"",
                              "value": "SwappaRouter: Pairs and Extras mismatch!"
                            },
                            "id": 8365,
                            "name": "Literal",
                            "src": "3367:42:61"
                          }
                        ],
                        "id": 8366,
                        "name": "FunctionCall",
                        "src": "3303:116:61"
                      }
                    ],
                    "id": 8367,
                    "name": "ExpressionStatement",
                    "src": "3303:116:61"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_50f8820bfeecb849a00cbe9e7b54a6b373cb7c22aa55809a32600c36edb64fa6",
                                  "typeString": "literal_string \"SwappaRouter: Must have at least one pair!\""
                                }
                              ],
                              "overloadedDeclarations": [
                                -18,
                                -18
                              ],
                              "referencedDeclaration": -18,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 8368,
                            "name": "Identifier",
                            "src": "3429:7:61"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": ">",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "length",
                                  "referencedDeclaration": null,
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 8328,
                                      "type": "address[] calldata",
                                      "value": "pairs"
                                    },
                                    "id": 8369,
                                    "name": "Identifier",
                                    "src": "3437:5:61"
                                  }
                                ],
                                "id": 8370,
                                "name": "MemberAccess",
                                "src": "3437:12:61"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "hexvalue": "30",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "subdenomination": null,
                                  "token": "number",
                                  "type": "int_const 0",
                                  "value": "0"
                                },
                                "id": 8371,
                                "name": "Literal",
                                "src": "3452:1:61"
                              }
                            ],
                            "id": 8372,
                            "name": "BinaryOperation",
                            "src": "3437:16:61"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "537761707061526f757465723a204d7573742068617665206174206c65617374206f6e65207061697221",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "string",
                              "type": "literal_string \"SwappaRouter: Must have at least one pair!\"",
                              "value": "SwappaRouter: Must have at least one pair!"
                            },
                            "id": 8373,
                            "name": "Literal",
                            "src": "3455:44:61"
                          }
                        ],
                        "id": 8374,
                        "name": "FunctionCall",
                        "src": "3429:71:61"
                      }
                    ],
                    "id": 8375,
                    "name": "ExpressionStatement",
                    "src": "3429:71:61"
                  },
                  {
                    "children": [
                      {
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "=",
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 8346,
                                  "type": "uint256",
                                  "value": "outputAmount"
                                },
                                "id": 8376,
                                "name": "Identifier",
                                "src": "3801:12:61"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 8333,
                                  "type": "uint256",
                                  "value": "inputAmount"
                                },
                                "id": 8377,
                                "name": "Identifier",
                                "src": "3816:11:61"
                              }
                            ],
                            "id": 8378,
                            "name": "Assignment",
                            "src": "3801:26:61"
                          }
                        ],
                        "id": 8379,
                        "name": "ExpressionStatement",
                        "src": "3801:26:61"
                      },
                      {
                        "children": [
                          {
                            "attributes": {
                              "assignments": [
                                8381
                              ],
                              "initialValue": null
                            },
                            "children": [
                              {
                                "attributes": {
                                  "constant": false,
                                  "mutability": "mutable",
                                  "name": "i",
                                  "overrides": null,
                                  "scope": 8425,
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "type": "uint256",
                                  "value": null,
                                  "visibility": "internal"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "name": "uint",
                                      "type": "uint256"
                                    },
                                    "id": 8380,
                                    "name": "ElementaryTypeName",
                                    "src": "3911:4:61"
                                  }
                                ],
                                "id": 8381,
                                "name": "VariableDeclaration",
                                "src": "3911:6:61"
                              }
                            ],
                            "id": 8382,
                            "name": "VariableDeclarationStatement",
                            "src": "3911:6:61"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "<",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 8381,
                                  "type": "uint256",
                                  "value": "i"
                                },
                                "id": 8383,
                                "name": "Identifier",
                                "src": "3919:1:61"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "length",
                                  "referencedDeclaration": null,
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 8328,
                                      "type": "address[] calldata",
                                      "value": "pairs"
                                    },
                                    "id": 8384,
                                    "name": "Identifier",
                                    "src": "3923:5:61"
                                  }
                                ],
                                "id": 8385,
                                "name": "MemberAccess",
                                "src": "3923:12:61"
                              }
                            ],
                            "id": 8386,
                            "name": "BinaryOperation",
                            "src": "3919:16:61"
                          },
                          {
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "++",
                                  "prefix": false,
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 8381,
                                      "type": "uint256",
                                      "value": "i"
                                    },
                                    "id": 8387,
                                    "name": "Identifier",
                                    "src": "3937:1:61"
                                  }
                                ],
                                "id": 8388,
                                "name": "UnaryOperation",
                                "src": "3937:3:61"
                              }
                            ],
                            "id": 8389,
                            "name": "ExpressionStatement",
                            "src": "3937:3:61"
                          },
                          {
                            "children": [
                              {
                                "attributes": {
                                  "assignments": [
                                    8391,
                                    8393
                                  ]
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "constant": false,
                                      "mutability": "mutable",
                                      "name": "input",
                                      "overrides": null,
                                      "scope": 8424,
                                      "stateVariable": false,
                                      "storageLocation": "default",
                                      "type": "address",
                                      "value": null,
                                      "visibility": "internal"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "name": "address",
                                          "stateMutability": "nonpayable",
                                          "type": "address"
                                        },
                                        "id": 8390,
                                        "name": "ElementaryTypeName",
                                        "src": "3961:7:61"
                                      }
                                    ],
                                    "id": 8391,
                                    "name": "VariableDeclaration",
                                    "src": "3961:13:61"
                                  },
                                  {
                                    "attributes": {
                                      "constant": false,
                                      "mutability": "mutable",
                                      "name": "output",
                                      "overrides": null,
                                      "scope": 8424,
                                      "stateVariable": false,
                                      "storageLocation": "default",
                                      "type": "address",
                                      "value": null,
                                      "visibility": "internal"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "name": "address",
                                          "stateMutability": "nonpayable",
                                          "type": "address"
                                        },
                                        "id": 8392,
                                        "name": "ElementaryTypeName",
                                        "src": "3976:7:61"
                                      }
                                    ],
                                    "id": 8393,
                                    "name": "VariableDeclaration",
                                    "src": "3976:14:61"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isInlineArray": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "type": "tuple(address,address)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "type": "address"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 8325,
                                              "type": "address[] calldata",
                                              "value": "path"
                                            },
                                            "id": 8394,
                                            "name": "Identifier",
                                            "src": "3995:4:61"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 8381,
                                              "type": "uint256",
                                              "value": "i"
                                            },
                                            "id": 8395,
                                            "name": "Identifier",
                                            "src": "4000:1:61"
                                          }
                                        ],
                                        "id": 8396,
                                        "name": "IndexAccess",
                                        "src": "3995:7:61"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "type": "address"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 8325,
                                              "type": "address[] calldata",
                                              "value": "path"
                                            },
                                            "id": 8397,
                                            "name": "Identifier",
                                            "src": "4004:4:61"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "commonType": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              },
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "operator": "+",
                                              "type": "uint256"
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "overloadedDeclarations": [
                                                    null
                                                  ],
                                                  "referencedDeclaration": 8381,
                                                  "type": "uint256",
                                                  "value": "i"
                                                },
                                                "id": 8398,
                                                "name": "Identifier",
                                                "src": "4009:1:61"
                                              },
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "hexvalue": "31",
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": true,
                                                  "lValueRequested": false,
                                                  "subdenomination": null,
                                                  "token": "number",
                                                  "type": "int_const 1",
                                                  "value": "1"
                                                },
                                                "id": 8399,
                                                "name": "Literal",
                                                "src": "4013:1:61"
                                              }
                                            ],
                                            "id": 8400,
                                            "name": "BinaryOperation",
                                            "src": "4009:5:61"
                                          }
                                        ],
                                        "id": 8401,
                                        "name": "IndexAccess",
                                        "src": "4004:11:61"
                                      }
                                    ],
                                    "id": 8402,
                                    "name": "TupleExpression",
                                    "src": "3994:22:61"
                                  }
                                ],
                                "id": 8403,
                                "name": "VariableDeclarationStatement",
                                "src": "3960:56:61"
                              },
                              {
                                "attributes": {
                                  "assignments": [
                                    8405
                                  ]
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "constant": false,
                                      "mutability": "mutable",
                                      "name": "data",
                                      "overrides": null,
                                      "scope": 8424,
                                      "stateVariable": false,
                                      "storageLocation": "memory",
                                      "type": "bytes",
                                      "value": null,
                                      "visibility": "internal"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "name": "bytes",
                                          "type": "bytes"
                                        },
                                        "id": 8404,
                                        "name": "ElementaryTypeName",
                                        "src": "4034:5:61"
                                      }
                                    ],
                                    "id": 8405,
                                    "name": "VariableDeclaration",
                                    "src": "4034:17:61"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "type": "bytes calldata"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 8331,
                                          "type": "bytes calldata[] calldata",
                                          "value": "extras"
                                        },
                                        "id": 8406,
                                        "name": "Identifier",
                                        "src": "4054:6:61"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 8381,
                                          "type": "uint256",
                                          "value": "i"
                                        },
                                        "id": 8407,
                                        "name": "Identifier",
                                        "src": "4061:1:61"
                                      }
                                    ],
                                    "id": 8408,
                                    "name": "IndexAccess",
                                    "src": "4054:9:61"
                                  }
                                ],
                                "id": 8409,
                                "name": "VariableDeclarationStatement",
                                "src": "4034:29:61"
                              },
                              {
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "operator": "=",
                                      "type": "uint256"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 8346,
                                          "type": "uint256",
                                          "value": "outputAmount"
                                        },
                                        "id": 8410,
                                        "name": "Identifier",
                                        "src": "4081:12:61"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "isStructConstructorCall": false,
                                          "lValueRequested": false,
                                          "names": [
                                            null
                                          ],
                                          "tryCall": false,
                                          "type": "uint256",
                                          "type_conversion": false
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": [
                                                {
                                                  "typeIdentifier": "t_address",
                                                  "typeString": "address"
                                                },
                                                {
                                                  "typeIdentifier": "t_address",
                                                  "typeString": "address"
                                                },
                                                {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                },
                                                {
                                                  "typeIdentifier": "t_bytes_memory_ptr",
                                                  "typeString": "bytes memory"
                                                }
                                              ],
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "member_name": "getOutputAmount",
                                              "referencedDeclaration": 5324,
                                              "type": "function (address,address,uint256,bytes memory) external returns (uint256)"
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": false,
                                                  "isStructConstructorCall": false,
                                                  "lValueRequested": false,
                                                  "names": [
                                                    null
                                                  ],
                                                  "tryCall": false,
                                                  "type": "contract ISwappaPairV1",
                                                  "type_conversion": true
                                                },
                                                "children": [
                                                  {
                                                    "attributes": {
                                                      "argumentTypes": [
                                                        {
                                                          "typeIdentifier": "t_address",
                                                          "typeString": "address"
                                                        }
                                                      ],
                                                      "overloadedDeclarations": [
                                                        null
                                                      ],
                                                      "referencedDeclaration": 5325,
                                                      "type": "type(contract ISwappaPairV1)",
                                                      "value": "ISwappaPairV1"
                                                    },
                                                    "id": 8411,
                                                    "name": "Identifier",
                                                    "src": "4096:13:61"
                                                  },
                                                  {
                                                    "attributes": {
                                                      "argumentTypes": null,
                                                      "isConstant": false,
                                                      "isLValue": false,
                                                      "isPure": false,
                                                      "lValueRequested": false,
                                                      "type": "address"
                                                    },
                                                    "children": [
                                                      {
                                                        "attributes": {
                                                          "argumentTypes": null,
                                                          "overloadedDeclarations": [
                                                            null
                                                          ],
                                                          "referencedDeclaration": 8328,
                                                          "type": "address[] calldata",
                                                          "value": "pairs"
                                                        },
                                                        "id": 8412,
                                                        "name": "Identifier",
                                                        "src": "4110:5:61"
                                                      },
                                                      {
                                                        "attributes": {
                                                          "argumentTypes": null,
                                                          "overloadedDeclarations": [
                                                            null
                                                          ],
                                                          "referencedDeclaration": 8381,
                                                          "type": "uint256",
                                                          "value": "i"
                                                        },
                                                        "id": 8413,
                                                        "name": "Identifier",
                                                        "src": "4116:1:61"
                                                      }
                                                    ],
                                                    "id": 8414,
                                                    "name": "IndexAccess",
                                                    "src": "4110:8:61"
                                                  }
                                                ],
                                                "id": 8415,
                                                "name": "FunctionCall",
                                                "src": "4096:23:61"
                                              }
                                            ],
                                            "id": 8416,
                                            "name": "MemberAccess",
                                            "src": "4096:39:61"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 8391,
                                              "type": "address",
                                              "value": "input"
                                            },
                                            "id": 8417,
                                            "name": "Identifier",
                                            "src": "4157:5:61"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 8393,
                                              "type": "address",
                                              "value": "output"
                                            },
                                            "id": 8418,
                                            "name": "Identifier",
                                            "src": "4184:6:61"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 8346,
                                              "type": "uint256",
                                              "value": "outputAmount"
                                            },
                                            "id": 8419,
                                            "name": "Identifier",
                                            "src": "4212:12:61"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 8405,
                                              "type": "bytes memory",
                                              "value": "data"
                                            },
                                            "id": 8420,
                                            "name": "Identifier",
                                            "src": "4246:4:61"
                                          }
                                        ],
                                        "id": 8421,
                                        "name": "FunctionCall",
                                        "src": "4096:172:61"
                                      }
                                    ],
                                    "id": 8422,
                                    "name": "Assignment",
                                    "src": "4081:187:61"
                                  }
                                ],
                                "id": 8423,
                                "name": "ExpressionStatement",
                                "src": "4081:187:61"
                              }
                            ],
                            "id": 8424,
                            "name": "Block",
                            "src": "3942:341:61"
                          }
                        ],
                        "id": 8425,
                        "name": "ForStatement",
                        "src": "3906:377:61"
                      },
                      {
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "tuple()",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    },
                                    {
                                      "typeIdentifier": "t_stringliteral_92c647a9df827f435e95e55348ef3d9783657104085606ff16cb5738ddbeffe7",
                                      "typeString": "literal_string \"SwappaRouter: Insufficient expected output amount!\""
                                    }
                                  ],
                                  "overloadedDeclarations": [
                                    -18,
                                    -18
                                  ],
                                  "referencedDeclaration": -18,
                                  "type": "function (bool,string memory) pure",
                                  "value": "require"
                                },
                                "id": 8426,
                                "name": "Identifier",
                                "src": "4296:7:61"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": ">=",
                                  "type": "bool"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 8346,
                                      "type": "uint256",
                                      "value": "outputAmount"
                                    },
                                    "id": 8427,
                                    "name": "Identifier",
                                    "src": "4321:12:61"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 8335,
                                      "type": "uint256",
                                      "value": "minOutputAmount"
                                    },
                                    "id": 8428,
                                    "name": "Identifier",
                                    "src": "4337:15:61"
                                  }
                                ],
                                "id": 8429,
                                "name": "BinaryOperation",
                                "src": "4321:31:61"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "hexvalue": "537761707061526f757465723a20496e73756666696369656e74206578706563746564206f757470757420616d6f756e7421",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "subdenomination": null,
                                  "token": "string",
                                  "type": "literal_string \"SwappaRouter: Insufficient expected output amount!\"",
                                  "value": "SwappaRouter: Insufficient expected output amount!"
                                },
                                "id": 8430,
                                "name": "Literal",
                                "src": "4370:52:61"
                              }
                            ],
                            "id": 8431,
                            "name": "FunctionCall",
                            "src": "4296:140:61"
                          }
                        ],
                        "id": 8432,
                        "name": "ExpressionStatement",
                        "src": "4296:140:61"
                      }
                    ],
                    "id": 8433,
                    "name": "Block",
                    "src": "3787:660:61"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_5d4db394429342c290de88dc1012d1383b0e08cbeb120c2513f7aad8def9fc3d",
                                  "typeString": "literal_string \"SwappaRouter: Initial transferFrom failed!\""
                                }
                              ],
                              "overloadedDeclarations": [
                                -18,
                                -18
                              ],
                              "referencedDeclaration": -18,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 8434,
                            "name": "Identifier",
                            "src": "4457:7:61"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "bool",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address_payable",
                                      "typeString": "address payable"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "transferFrom",
                                  "referencedDeclaration": 423,
                                  "type": "function (address,address,uint256) external returns (bool)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "isStructConstructorCall": false,
                                      "lValueRequested": false,
                                      "names": [
                                        null
                                      ],
                                      "tryCall": false,
                                      "type": "contract ERC20",
                                      "type_conversion": true
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            }
                                          ],
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 725,
                                          "type": "type(contract ERC20)",
                                          "value": "ERC20"
                                        },
                                        "id": 8435,
                                        "name": "Identifier",
                                        "src": "4478:5:61"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "type": "address"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 8325,
                                              "type": "address[] calldata",
                                              "value": "path"
                                            },
                                            "id": 8436,
                                            "name": "Identifier",
                                            "src": "4484:4:61"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "hexvalue": "30",
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "lValueRequested": false,
                                              "subdenomination": null,
                                              "token": "number",
                                              "type": "int_const 0",
                                              "value": "0"
                                            },
                                            "id": 8437,
                                            "name": "Literal",
                                            "src": "4489:1:61"
                                          }
                                        ],
                                        "id": 8438,
                                        "name": "IndexAccess",
                                        "src": "4484:7:61"
                                      }
                                    ],
                                    "id": 8439,
                                    "name": "FunctionCall",
                                    "src": "4478:14:61"
                                  }
                                ],
                                "id": 8440,
                                "name": "MemberAccess",
                                "src": "4478:27:61"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "sender",
                                  "referencedDeclaration": null,
                                  "type": "address payable"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": -15,
                                      "type": "msg",
                                      "value": "msg"
                                    },
                                    "id": 8441,
                                    "name": "Identifier",
                                    "src": "4506:3:61"
                                  }
                                ],
                                "id": 8442,
                                "name": "MemberAccess",
                                "src": "4506:10:61"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "type": "address"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 8328,
                                      "type": "address[] calldata",
                                      "value": "pairs"
                                    },
                                    "id": 8443,
                                    "name": "Identifier",
                                    "src": "4518:5:61"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "hexvalue": "30",
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "subdenomination": null,
                                      "token": "number",
                                      "type": "int_const 0",
                                      "value": "0"
                                    },
                                    "id": 8444,
                                    "name": "Literal",
                                    "src": "4524:1:61"
                                  }
                                ],
                                "id": 8445,
                                "name": "IndexAccess",
                                "src": "4518:8:61"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 8333,
                                  "type": "uint256",
                                  "value": "inputAmount"
                                },
                                "id": 8446,
                                "name": "Identifier",
                                "src": "4528:11:61"
                              }
                            ],
                            "id": 8447,
                            "name": "FunctionCall",
                            "src": "4478:62:61"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "537761707061526f757465723a20496e697469616c207472616e7366657246726f6d206661696c656421",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "string",
                              "type": "literal_string \"SwappaRouter: Initial transferFrom failed!\"",
                              "value": "SwappaRouter: Initial transferFrom failed!"
                            },
                            "id": 8448,
                            "name": "Literal",
                            "src": "4554:44:61"
                          }
                        ],
                        "id": 8449,
                        "name": "FunctionCall",
                        "src": "4457:151:61"
                      }
                    ],
                    "id": 8450,
                    "name": "ExpressionStatement",
                    "src": "4457:151:61"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "assignments": [
                            8452
                          ],
                          "initialValue": null
                        },
                        "children": [
                          {
                            "attributes": {
                              "constant": false,
                              "mutability": "mutable",
                              "name": "i",
                              "overrides": null,
                              "scope": 8513,
                              "stateVariable": false,
                              "storageLocation": "default",
                              "type": "uint256",
                              "value": null,
                              "visibility": "internal"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "name": "uint",
                                  "type": "uint256"
                                },
                                "id": 8451,
                                "name": "ElementaryTypeName",
                                "src": "4623:4:61"
                              }
                            ],
                            "id": 8452,
                            "name": "VariableDeclaration",
                            "src": "4623:6:61"
                          }
                        ],
                        "id": 8453,
                        "name": "VariableDeclarationStatement",
                        "src": "4623:6:61"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "<",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 8452,
                              "type": "uint256",
                              "value": "i"
                            },
                            "id": 8454,
                            "name": "Identifier",
                            "src": "4631:1:61"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "length",
                              "referencedDeclaration": null,
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 8328,
                                  "type": "address[] calldata",
                                  "value": "pairs"
                                },
                                "id": 8455,
                                "name": "Identifier",
                                "src": "4635:5:61"
                              }
                            ],
                            "id": 8456,
                            "name": "MemberAccess",
                            "src": "4635:12:61"
                          }
                        ],
                        "id": 8457,
                        "name": "BinaryOperation",
                        "src": "4631:16:61"
                      },
                      {
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "++",
                              "prefix": false,
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 8452,
                                  "type": "uint256",
                                  "value": "i"
                                },
                                "id": 8458,
                                "name": "Identifier",
                                "src": "4649:1:61"
                              }
                            ],
                            "id": 8459,
                            "name": "UnaryOperation",
                            "src": "4649:3:61"
                          }
                        ],
                        "id": 8460,
                        "name": "ExpressionStatement",
                        "src": "4649:3:61"
                      },
                      {
                        "children": [
                          {
                            "attributes": {
                              "assignments": [
                                8462,
                                8464
                              ]
                            },
                            "children": [
                              {
                                "attributes": {
                                  "constant": false,
                                  "mutability": "mutable",
                                  "name": "pairInput",
                                  "overrides": null,
                                  "scope": 8512,
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "type": "address",
                                  "value": null,
                                  "visibility": "internal"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "name": "address",
                                      "stateMutability": "nonpayable",
                                      "type": "address"
                                    },
                                    "id": 8461,
                                    "name": "ElementaryTypeName",
                                    "src": "4669:7:61"
                                  }
                                ],
                                "id": 8462,
                                "name": "VariableDeclaration",
                                "src": "4669:17:61"
                              },
                              {
                                "attributes": {
                                  "constant": false,
                                  "mutability": "mutable",
                                  "name": "pairOutput",
                                  "overrides": null,
                                  "scope": 8512,
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "type": "address",
                                  "value": null,
                                  "visibility": "internal"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "name": "address",
                                      "stateMutability": "nonpayable",
                                      "type": "address"
                                    },
                                    "id": 8463,
                                    "name": "ElementaryTypeName",
                                    "src": "4688:7:61"
                                  }
                                ],
                                "id": 8464,
                                "name": "VariableDeclaration",
                                "src": "4688:18:61"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "type": "tuple(address,address)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "type": "address"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 8325,
                                          "type": "address[] calldata",
                                          "value": "path"
                                        },
                                        "id": 8465,
                                        "name": "Identifier",
                                        "src": "4711:4:61"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 8452,
                                          "type": "uint256",
                                          "value": "i"
                                        },
                                        "id": 8466,
                                        "name": "Identifier",
                                        "src": "4716:1:61"
                                      }
                                    ],
                                    "id": 8467,
                                    "name": "IndexAccess",
                                    "src": "4711:7:61"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "type": "address"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 8325,
                                          "type": "address[] calldata",
                                          "value": "path"
                                        },
                                        "id": 8468,
                                        "name": "Identifier",
                                        "src": "4720:4:61"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "operator": "+",
                                          "type": "uint256"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 8452,
                                              "type": "uint256",
                                              "value": "i"
                                            },
                                            "id": 8469,
                                            "name": "Identifier",
                                            "src": "4725:1:61"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "hexvalue": "31",
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "lValueRequested": false,
                                              "subdenomination": null,
                                              "token": "number",
                                              "type": "int_const 1",
                                              "value": "1"
                                            },
                                            "id": 8470,
                                            "name": "Literal",
                                            "src": "4729:1:61"
                                          }
                                        ],
                                        "id": 8471,
                                        "name": "BinaryOperation",
                                        "src": "4725:5:61"
                                      }
                                    ],
                                    "id": 8472,
                                    "name": "IndexAccess",
                                    "src": "4720:11:61"
                                  }
                                ],
                                "id": 8473,
                                "name": "TupleExpression",
                                "src": "4710:22:61"
                              }
                            ],
                            "id": 8474,
                            "name": "VariableDeclarationStatement",
                            "src": "4668:64:61"
                          },
                          {
                            "attributes": {
                              "assignments": [
                                8476
                              ]
                            },
                            "children": [
                              {
                                "attributes": {
                                  "constant": false,
                                  "mutability": "mutable",
                                  "name": "next",
                                  "overrides": null,
                                  "scope": 8512,
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "type": "address",
                                  "value": null,
                                  "visibility": "internal"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "name": "address",
                                      "stateMutability": "nonpayable",
                                      "type": "address"
                                    },
                                    "id": 8475,
                                    "name": "ElementaryTypeName",
                                    "src": "4746:7:61"
                                  }
                                ],
                                "id": 8476,
                                "name": "VariableDeclaration",
                                "src": "4746:12:61"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "type": "address"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "operator": "<",
                                      "type": "bool"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 8452,
                                          "type": "uint256",
                                          "value": "i"
                                        },
                                        "id": 8477,
                                        "name": "Identifier",
                                        "src": "4761:1:61"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "operator": "-",
                                          "type": "uint256"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "member_name": "length",
                                              "referencedDeclaration": null,
                                              "type": "uint256"
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "overloadedDeclarations": [
                                                    null
                                                  ],
                                                  "referencedDeclaration": 8328,
                                                  "type": "address[] calldata",
                                                  "value": "pairs"
                                                },
                                                "id": 8478,
                                                "name": "Identifier",
                                                "src": "4765:5:61"
                                              }
                                            ],
                                            "id": 8479,
                                            "name": "MemberAccess",
                                            "src": "4765:12:61"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "hexvalue": "31",
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "lValueRequested": false,
                                              "subdenomination": null,
                                              "token": "number",
                                              "type": "int_const 1",
                                              "value": "1"
                                            },
                                            "id": 8480,
                                            "name": "Literal",
                                            "src": "4780:1:61"
                                          }
                                        ],
                                        "id": 8481,
                                        "name": "BinaryOperation",
                                        "src": "4765:16:61"
                                      }
                                    ],
                                    "id": 8482,
                                    "name": "BinaryOperation",
                                    "src": "4761:20:61"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "type": "address"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 8328,
                                          "type": "address[] calldata",
                                          "value": "pairs"
                                        },
                                        "id": 8483,
                                        "name": "Identifier",
                                        "src": "4784:5:61"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "operator": "+",
                                          "type": "uint256"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 8452,
                                              "type": "uint256",
                                              "value": "i"
                                            },
                                            "id": 8484,
                                            "name": "Identifier",
                                            "src": "4790:1:61"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "hexvalue": "31",
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "lValueRequested": false,
                                              "subdenomination": null,
                                              "token": "number",
                                              "type": "int_const 1",
                                              "value": "1"
                                            },
                                            "id": 8485,
                                            "name": "Literal",
                                            "src": "4794:1:61"
                                          }
                                        ],
                                        "id": 8486,
                                        "name": "BinaryOperation",
                                        "src": "4790:5:61"
                                      }
                                    ],
                                    "id": 8487,
                                    "name": "IndexAccess",
                                    "src": "4784:12:61"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "isStructConstructorCall": false,
                                      "lValueRequested": false,
                                      "names": [
                                        null
                                      ],
                                      "tryCall": false,
                                      "type": "address payable",
                                      "type_conversion": true
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_contract$_SwappaRouterV1_$8571",
                                              "typeString": "contract SwappaRouterV1"
                                            }
                                          ],
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "type": "type(address)"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "name": "address",
                                              "type": null
                                            },
                                            "id": 8488,
                                            "name": "ElementaryTypeName",
                                            "src": "4799:7:61"
                                          }
                                        ],
                                        "id": 8489,
                                        "name": "ElementaryTypeNameExpression",
                                        "src": "4799:7:61"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": -28,
                                          "type": "contract SwappaRouterV1",
                                          "value": "this"
                                        },
                                        "id": 8490,
                                        "name": "Identifier",
                                        "src": "4807:4:61"
                                      }
                                    ],
                                    "id": 8491,
                                    "name": "FunctionCall",
                                    "src": "4799:13:61"
                                  }
                                ],
                                "id": 8492,
                                "name": "Conditional",
                                "src": "4761:51:61"
                              }
                            ],
                            "id": 8493,
                            "name": "VariableDeclarationStatement",
                            "src": "4746:66:61"
                          },
                          {
                            "attributes": {
                              "assignments": [
                                8495
                              ]
                            },
                            "children": [
                              {
                                "attributes": {
                                  "constant": false,
                                  "mutability": "mutable",
                                  "name": "data",
                                  "overrides": null,
                                  "scope": 8512,
                                  "stateVariable": false,
                                  "storageLocation": "memory",
                                  "type": "bytes",
                                  "value": null,
                                  "visibility": "internal"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "name": "bytes",
                                      "type": "bytes"
                                    },
                                    "id": 8494,
                                    "name": "ElementaryTypeName",
                                    "src": "4826:5:61"
                                  }
                                ],
                                "id": 8495,
                                "name": "VariableDeclaration",
                                "src": "4826:17:61"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "type": "bytes calldata"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 8331,
                                      "type": "bytes calldata[] calldata",
                                      "value": "extras"
                                    },
                                    "id": 8496,
                                    "name": "Identifier",
                                    "src": "4846:6:61"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 8452,
                                      "type": "uint256",
                                      "value": "i"
                                    },
                                    "id": 8497,
                                    "name": "Identifier",
                                    "src": "4853:1:61"
                                  }
                                ],
                                "id": 8498,
                                "name": "IndexAccess",
                                "src": "4846:9:61"
                              }
                            ],
                            "id": 8499,
                            "name": "VariableDeclarationStatement",
                            "src": "4826:29:61"
                          },
                          {
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "tryCall": false,
                                  "type": "tuple()",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        },
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        },
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        },
                                        {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes memory"
                                        }
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "swap",
                                      "referencedDeclaration": 5311,
                                      "type": "function (address,address,address,bytes memory) external"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "isStructConstructorCall": false,
                                          "lValueRequested": false,
                                          "names": [
                                            null
                                          ],
                                          "tryCall": false,
                                          "type": "contract ISwappaPairV1",
                                          "type_conversion": true
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": [
                                                {
                                                  "typeIdentifier": "t_address",
                                                  "typeString": "address"
                                                }
                                              ],
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 5325,
                                              "type": "type(contract ISwappaPairV1)",
                                              "value": "ISwappaPairV1"
                                            },
                                            "id": 8500,
                                            "name": "Identifier",
                                            "src": "4869:13:61"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "type": "address"
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "overloadedDeclarations": [
                                                    null
                                                  ],
                                                  "referencedDeclaration": 8328,
                                                  "type": "address[] calldata",
                                                  "value": "pairs"
                                                },
                                                "id": 8501,
                                                "name": "Identifier",
                                                "src": "4883:5:61"
                                              },
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "overloadedDeclarations": [
                                                    null
                                                  ],
                                                  "referencedDeclaration": 8452,
                                                  "type": "uint256",
                                                  "value": "i"
                                                },
                                                "id": 8502,
                                                "name": "Identifier",
                                                "src": "4889:1:61"
                                              }
                                            ],
                                            "id": 8503,
                                            "name": "IndexAccess",
                                            "src": "4883:8:61"
                                          }
                                        ],
                                        "id": 8504,
                                        "name": "FunctionCall",
                                        "src": "4869:23:61"
                                      }
                                    ],
                                    "id": 8505,
                                    "name": "MemberAccess",
                                    "src": "4869:28:61"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 8462,
                                      "type": "address",
                                      "value": "pairInput"
                                    },
                                    "id": 8506,
                                    "name": "Identifier",
                                    "src": "4898:9:61"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 8464,
                                      "type": "address",
                                      "value": "pairOutput"
                                    },
                                    "id": 8507,
                                    "name": "Identifier",
                                    "src": "4909:10:61"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 8476,
                                      "type": "address",
                                      "value": "next"
                                    },
                                    "id": 8508,
                                    "name": "Identifier",
                                    "src": "4921:4:61"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 8495,
                                      "type": "bytes memory",
                                      "value": "data"
                                    },
                                    "id": 8509,
                                    "name": "Identifier",
                                    "src": "4927:4:61"
                                  }
                                ],
                                "id": 8510,
                                "name": "FunctionCall",
                                "src": "4869:63:61"
                              }
                            ],
                            "id": 8511,
                            "name": "ExpressionStatement",
                            "src": "4869:63:61"
                          }
                        ],
                        "id": 8512,
                        "name": "Block",
                        "src": "4654:289:61"
                      }
                    ],
                    "id": 8513,
                    "name": "ForStatement",
                    "src": "4618:325:61"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        8515
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "output",
                          "overrides": null,
                          "scope": 8565,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "address",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "address",
                              "stateMutability": "nonpayable",
                              "type": "address"
                            },
                            "id": 8514,
                            "name": "ElementaryTypeName",
                            "src": "5104:7:61"
                          }
                        ],
                        "id": 8515,
                        "name": "VariableDeclaration",
                        "src": "5104:14:61"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "type": "address"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 8325,
                              "type": "address[] calldata",
                              "value": "path"
                            },
                            "id": 8516,
                            "name": "Identifier",
                            "src": "5121:4:61"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "-",
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "length",
                                  "referencedDeclaration": null,
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 8325,
                                      "type": "address[] calldata",
                                      "value": "path"
                                    },
                                    "id": 8517,
                                    "name": "Identifier",
                                    "src": "5126:4:61"
                                  }
                                ],
                                "id": 8518,
                                "name": "MemberAccess",
                                "src": "5126:11:61"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "hexvalue": "31",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "subdenomination": null,
                                  "token": "number",
                                  "type": "int_const 1",
                                  "value": "1"
                                },
                                "id": 8519,
                                "name": "Literal",
                                "src": "5140:1:61"
                              }
                            ],
                            "id": 8520,
                            "name": "BinaryOperation",
                            "src": "5126:15:61"
                          }
                        ],
                        "id": 8521,
                        "name": "IndexAccess",
                        "src": "5121:21:61"
                      }
                    ],
                    "id": 8522,
                    "name": "VariableDeclarationStatement",
                    "src": "5104:38:61"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "uint256"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 8346,
                              "type": "uint256",
                              "value": "outputAmount"
                            },
                            "id": 8523,
                            "name": "Identifier",
                            "src": "5152:12:61"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "uint256",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address_payable",
                                      "typeString": "address payable"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "balanceOf",
                                  "referencedDeclaration": 325,
                                  "type": "function (address) view external returns (uint256)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "isStructConstructorCall": false,
                                      "lValueRequested": false,
                                      "names": [
                                        null
                                      ],
                                      "tryCall": false,
                                      "type": "contract ERC20",
                                      "type_conversion": true
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            }
                                          ],
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 725,
                                          "type": "type(contract ERC20)",
                                          "value": "ERC20"
                                        },
                                        "id": 8524,
                                        "name": "Identifier",
                                        "src": "5167:5:61"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 8515,
                                          "type": "address",
                                          "value": "output"
                                        },
                                        "id": 8525,
                                        "name": "Identifier",
                                        "src": "5173:6:61"
                                      }
                                    ],
                                    "id": 8526,
                                    "name": "FunctionCall",
                                    "src": "5167:13:61"
                                  }
                                ],
                                "id": 8527,
                                "name": "MemberAccess",
                                "src": "5167:23:61"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "tryCall": false,
                                  "type": "address payable",
                                  "type_conversion": true
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_contract$_SwappaRouterV1_$8571",
                                          "typeString": "contract SwappaRouterV1"
                                        }
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "type": "type(address)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "name": "address",
                                          "type": null
                                        },
                                        "id": 8528,
                                        "name": "ElementaryTypeName",
                                        "src": "5191:7:61"
                                      }
                                    ],
                                    "id": 8529,
                                    "name": "ElementaryTypeNameExpression",
                                    "src": "5191:7:61"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": -28,
                                      "type": "contract SwappaRouterV1",
                                      "value": "this"
                                    },
                                    "id": 8530,
                                    "name": "Identifier",
                                    "src": "5199:4:61"
                                  }
                                ],
                                "id": 8531,
                                "name": "FunctionCall",
                                "src": "5191:13:61"
                              }
                            ],
                            "id": 8532,
                            "name": "FunctionCall",
                            "src": "5167:38:61"
                          }
                        ],
                        "id": 8533,
                        "name": "Assignment",
                        "src": "5152:53:61"
                      }
                    ],
                    "id": 8534,
                    "name": "ExpressionStatement",
                    "src": "5152:53:61"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_cefd04d9f158c54476d457b22a80719a9743d5a6e0418466da4fa21996dd4acf",
                                  "typeString": "literal_string \"SwappaRouter: Insufficient output amount!\""
                                }
                              ],
                              "overloadedDeclarations": [
                                -18,
                                -18
                              ],
                              "referencedDeclaration": -18,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 8535,
                            "name": "Identifier",
                            "src": "5215:7:61"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": ">=",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 8346,
                                  "type": "uint256",
                                  "value": "outputAmount"
                                },
                                "id": 8536,
                                "name": "Identifier",
                                "src": "5236:12:61"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 8335,
                                  "type": "uint256",
                                  "value": "minOutputAmount"
                                },
                                "id": 8537,
                                "name": "Identifier",
                                "src": "5252:15:61"
                              }
                            ],
                            "id": 8538,
                            "name": "BinaryOperation",
                            "src": "5236:31:61"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "537761707061526f757465723a20496e73756666696369656e74206f757470757420616d6f756e7421",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "string",
                              "type": "literal_string \"SwappaRouter: Insufficient output amount!\"",
                              "value": "SwappaRouter: Insufficient output amount!"
                            },
                            "id": 8539,
                            "name": "Literal",
                            "src": "5281:43:61"
                          }
                        ],
                        "id": 8540,
                        "name": "FunctionCall",
                        "src": "5215:119:61"
                      }
                    ],
                    "id": 8541,
                    "name": "ExpressionStatement",
                    "src": "5215:119:61"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_9adfc36c8bf82468d0028ce6cfdb8f1360397ed2f3915c2f2b40899f5aface4f",
                                  "typeString": "literal_string \"SwappaRouter: Final transfer failed!\""
                                }
                              ],
                              "overloadedDeclarations": [
                                -18,
                                -18
                              ],
                              "referencedDeclaration": -18,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 8542,
                            "name": "Identifier",
                            "src": "5344:7:61"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "bool",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "transfer",
                                  "referencedDeclaration": 346,
                                  "type": "function (address,uint256) external returns (bool)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "isStructConstructorCall": false,
                                      "lValueRequested": false,
                                      "names": [
                                        null
                                      ],
                                      "tryCall": false,
                                      "type": "contract ERC20",
                                      "type_conversion": true
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            }
                                          ],
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 725,
                                          "type": "type(contract ERC20)",
                                          "value": "ERC20"
                                        },
                                        "id": 8543,
                                        "name": "Identifier",
                                        "src": "5365:5:61"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 8515,
                                          "type": "address",
                                          "value": "output"
                                        },
                                        "id": 8544,
                                        "name": "Identifier",
                                        "src": "5371:6:61"
                                      }
                                    ],
                                    "id": 8545,
                                    "name": "FunctionCall",
                                    "src": "5365:13:61"
                                  }
                                ],
                                "id": 8546,
                                "name": "MemberAccess",
                                "src": "5365:22:61"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 8337,
                                  "type": "address",
                                  "value": "to"
                                },
                                "id": 8547,
                                "name": "Identifier",
                                "src": "5388:2:61"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 8346,
                                  "type": "uint256",
                                  "value": "outputAmount"
                                },
                                "id": 8548,
                                "name": "Identifier",
                                "src": "5392:12:61"
                              }
                            ],
                            "id": 8549,
                            "name": "FunctionCall",
                            "src": "5365:40:61"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "537761707061526f757465723a2046696e616c207472616e73666572206661696c656421",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "string",
                              "type": "literal_string \"SwappaRouter: Final transfer failed!\"",
                              "value": "SwappaRouter: Final transfer failed!"
                            },
                            "id": 8550,
                            "name": "Literal",
                            "src": "5419:38:61"
                          }
                        ],
                        "id": 8551,
                        "name": "FunctionCall",
                        "src": "5344:123:61"
                      }
                    ],
                    "id": 8552,
                    "name": "ExpressionStatement",
                    "src": "5344:123:61"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 8066,
                              "type": "function (address,address,address,address,uint256,uint256)",
                              "value": "Swap"
                            },
                            "id": 8553,
                            "name": "Identifier",
                            "src": "5482:4:61"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "sender",
                              "referencedDeclaration": null,
                              "type": "address payable"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": -15,
                                  "type": "msg",
                                  "value": "msg"
                                },
                                "id": 8554,
                                "name": "Identifier",
                                "src": "5487:3:61"
                              }
                            ],
                            "id": 8555,
                            "name": "MemberAccess",
                            "src": "5487:10:61"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 8337,
                              "type": "address",
                              "value": "to"
                            },
                            "id": 8556,
                            "name": "Identifier",
                            "src": "5499:2:61"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "type": "address"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 8325,
                                  "type": "address[] calldata",
                                  "value": "path"
                                },
                                "id": 8557,
                                "name": "Identifier",
                                "src": "5503:4:61"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "hexvalue": "30",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "subdenomination": null,
                                  "token": "number",
                                  "type": "int_const 0",
                                  "value": "0"
                                },
                                "id": 8558,
                                "name": "Literal",
                                "src": "5508:1:61"
                              }
                            ],
                            "id": 8559,
                            "name": "IndexAccess",
                            "src": "5503:7:61"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 8515,
                              "type": "address",
                              "value": "output"
                            },
                            "id": 8560,
                            "name": "Identifier",
                            "src": "5512:6:61"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 8333,
                              "type": "uint256",
                              "value": "inputAmount"
                            },
                            "id": 8561,
                            "name": "Identifier",
                            "src": "5520:11:61"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 8346,
                              "type": "uint256",
                              "value": "outputAmount"
                            },
                            "id": 8562,
                            "name": "Identifier",
                            "src": "5533:12:61"
                          }
                        ],
                        "id": 8563,
                        "name": "FunctionCall",
                        "src": "5482:64:61"
                      }
                    ],
                    "id": 8564,
                    "name": "EmitStatement",
                    "src": "5477:69:61"
                  }
                ],
                "id": 8565,
                "name": "Block",
                "src": "3167:2386:61"
              }
            ],
            "id": 8566,
            "name": "FunctionDefinition",
            "src": "2845:2708:61"
          },
          {
            "attributes": {
              "documentation": null,
              "implemented": true,
              "isConstructor": false,
              "kind": "receive",
              "modifiers": [
                null
              ],
              "name": "",
              "overrides": null,
              "scope": 8571,
              "stateMutability": "payable",
              "virtual": false,
              "visibility": "external"
            },
            "children": [
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 8567,
                "name": "ParameterList",
                "src": "5566:2:61"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 8568,
                "name": "ParameterList",
                "src": "5586:0:61"
              },
              {
                "attributes": {
                  "statements": [
                    null
                  ]
                },
                "children": [],
                "id": 8569,
                "name": "Block",
                "src": "5586:2:61"
              }
            ],
            "id": 8570,
            "name": "FunctionDefinition",
            "src": "5559:29:61"
          }
        ],
        "id": 8571,
        "name": "ContractDefinition",
        "src": "209:5381:61"
      }
    ],
    "id": 8572,
    "name": "SourceUnit",
    "src": "32:5559:61"
  },
  "compiler": {
    "name": "solc",
    "version": "0.6.8+commit.0bbfe453.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.4.16",
  "updatedAt": "2025-02-07T17:50:42.857Z",
  "devdoc": {
    "methods": {}
  },
  "userdoc": {
    "methods": {}
  }
}