{
  "contractName": "PairUniswapV3",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "input",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "swap",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "int256",
          "name": "amount0Delta",
          "type": "int256"
        },
        {
          "internalType": "int256",
          "name": "amount1Delta",
          "type": "int256"
        },
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "name": "uniswapV3SwapCallback",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "input",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "output",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amountIn",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "getOutputAmount",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "amountOut",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IUniswapV3Pool",
          "name": "pool",
          "type": "address"
        },
        {
          "internalType": "int16",
          "name": "maxLoopN",
          "type": "int16"
        }
      ],
      "name": "getPoolTicks",
      "outputs": [
        {
          "internalType": "uint160",
          "name": "sqrtPriceX96",
          "type": "uint160"
        },
        {
          "internalType": "int24",
          "name": "tick",
          "type": "int24"
        },
        {
          "internalType": "uint128",
          "name": "liquidity",
          "type": "uint128"
        },
        {
          "components": [
            {
              "internalType": "int24",
              "name": "tick",
              "type": "int24"
            },
            {
              "internalType": "int128",
              "name": "liquidityNet",
              "type": "int128"
            },
            {
              "internalType": "uint128",
              "name": "liquidityGross",
              "type": "uint128"
            }
          ],
          "internalType": "struct TickLens.PopulatedTick[]",
          "name": "populatedTicks0",
          "type": "tuple[]"
        },
        {
          "components": [
            {
              "internalType": "int24",
              "name": "tick",
              "type": "int24"
            },
            {
              "internalType": "int128",
              "name": "liquidityNet",
              "type": "int128"
            },
            {
              "internalType": "uint128",
              "name": "liquidityGross",
              "type": "uint128"
            }
          ],
          "internalType": "struct TickLens.PopulatedTick[]",
          "name": "populatedTicks1",
          "type": "tuple[]"
        },
        {
          "components": [
            {
              "internalType": "int24",
              "name": "tick",
              "type": "int24"
            },
            {
              "internalType": "int128",
              "name": "liquidityNet",
              "type": "int128"
            },
            {
              "internalType": "uint128",
              "name": "liquidityGross",
              "type": "uint128"
            }
          ],
          "internalType": "struct TickLens.PopulatedTick[]",
          "name": "populatedTicks2",
          "type": "tuple[]"
        },
        {
          "components": [
            {
              "internalType": "int24",
              "name": "tick",
              "type": "int24"
            },
            {
              "internalType": "int128",
              "name": "liquidityNet",
              "type": "int128"
            },
            {
              "internalType": "uint128",
              "name": "liquidityGross",
              "type": "uint128"
            }
          ],
          "internalType": "struct TickLens.PopulatedTick[]",
          "name": "populatedTicks3",
          "type": "tuple[]"
        },
        {
          "components": [
            {
              "internalType": "int24",
              "name": "tick",
              "type": "int24"
            },
            {
              "internalType": "int128",
              "name": "liquidityNet",
              "type": "int128"
            },
            {
              "internalType": "uint128",
              "name": "liquidityGross",
              "type": "uint128"
            }
          ],
          "internalType": "struct TickLens.PopulatedTick[]",
          "name": "populatedTicks4",
          "type": "tuple[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.6.8+commit.0bbfe453\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"input\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"output\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"getOutputAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IUniswapV3Pool\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"int16\",\"name\":\"maxLoopN\",\"type\":\"int16\"}],\"name\":\"getPoolTicks\",\"outputs\":[{\"internalType\":\"uint160\",\"name\":\"sqrtPriceX96\",\"type\":\"uint160\"},{\"internalType\":\"int24\",\"name\":\"tick\",\"type\":\"int24\"},{\"internalType\":\"uint128\",\"name\":\"liquidity\",\"type\":\"uint128\"},{\"components\":[{\"internalType\":\"int24\",\"name\":\"tick\",\"type\":\"int24\"},{\"internalType\":\"int128\",\"name\":\"liquidityNet\",\"type\":\"int128\"},{\"internalType\":\"uint128\",\"name\":\"liquidityGross\",\"type\":\"uint128\"}],\"internalType\":\"struct TickLens.PopulatedTick[]\",\"name\":\"populatedTicks0\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"int24\",\"name\":\"tick\",\"type\":\"int24\"},{\"internalType\":\"int128\",\"name\":\"liquidityNet\",\"type\":\"int128\"},{\"internalType\":\"uint128\",\"name\":\"liquidityGross\",\"type\":\"uint128\"}],\"internalType\":\"struct TickLens.PopulatedTick[]\",\"name\":\"populatedTicks1\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"int24\",\"name\":\"tick\",\"type\":\"int24\"},{\"internalType\":\"int128\",\"name\":\"liquidityNet\",\"type\":\"int128\"},{\"internalType\":\"uint128\",\"name\":\"liquidityGross\",\"type\":\"uint128\"}],\"internalType\":\"struct TickLens.PopulatedTick[]\",\"name\":\"populatedTicks2\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"int24\",\"name\":\"tick\",\"type\":\"int24\"},{\"internalType\":\"int128\",\"name\":\"liquidityNet\",\"type\":\"int128\"},{\"internalType\":\"uint128\",\"name\":\"liquidityGross\",\"type\":\"uint128\"}],\"internalType\":\"struct TickLens.PopulatedTick[]\",\"name\":\"populatedTicks3\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"int24\",\"name\":\"tick\",\"type\":\"int24\"},{\"internalType\":\"int128\",\"name\":\"liquidityNet\",\"type\":\"int128\"},{\"internalType\":\"uint128\",\"name\":\"liquidityGross\",\"type\":\"uint128\"}],\"internalType\":\"struct TickLens.PopulatedTick[]\",\"name\":\"populatedTicks4\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"input\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"swap\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"amount0Delta\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"amount1Delta\",\"type\":\"int256\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"uniswapV3SwapCallback\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"methods\":{}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"project:/contracts/swappa/PairUniswapV3.sol\":\"PairUniswapV3\"},\"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/interfaces/uniswap/IQuoterV2.sol\":{\"keccak256\":\"0x9693f3a223b133f30f0ce9ad74285070e80a59093d0f05a2af8affa4d254587d\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://8308eb130920f5b6979fadf728c12c1ac1f6977047586c141237e5b1c510327f\",\"dweb:/ipfs/Qmem2CDt6Vyz4TbcXfWXFGF9VM4y9dAcdt95TgJPhBJXez\"]},\"project:/contracts/interfaces/uniswap/IUniswapV3Pool.sol\":{\"keccak256\":\"0xe957ed4e407f0286c022184f451aa37cc0949b6a0d35415932a8c8fe00cb98b9\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://afb6131e293dec2a54d43353b0a4063070a7534cc913de30feeebedc9c801c28\",\"dweb:/ipfs/QmfDgaBfrnvjBUhR69tN1c2XYCi17ofVL7QkJY68LW9bZ7\"]},\"project:/contracts/interfaces/uniswap/IUniswapV3PoolActions.sol\":{\"keccak256\":\"0x9453dd0e7442188667d01d9b65de3f1e14e9511ff3e303179a15f6fc267f7634\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://982f4328f956c3e60e67501e759eb292ac487f76460c774c50e9ae4fcc92aae5\",\"dweb:/ipfs/QmRnzEDsaqtd9PJEVcgQi7p5aV5pMSvRUoGZJAdwFUJxgZ\"]},\"project:/contracts/interfaces/uniswap/IUniswapV3PoolImmutables.sol\":{\"keccak256\":\"0xf6e5d2cd1139c4c276bdbc8e1d2b256e456c866a91f1b868da265c6d2685c3f7\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://b99c8c9ae8e27ee6559e5866bea82cbc9ffc8247f8d15b7422a4deb287d4d047\",\"dweb:/ipfs/QmfL8gaqt3ffAnm6nVj5ksuNpLygXuL3xq5VBqrkwC2JJ3\"]},\"project:/contracts/interfaces/uniswap/IUniswapV3PoolState.sol\":{\"keccak256\":\"0x852dc1f5df7dcf7f11e7bb3eed79f0cea72ad4b25f6a9d2c35aafb48925fd49f\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://ed63907c38ff36b0e22bc9ffc53e791ea74f0d4f0e7c257fdfb5aaf8825b1f0f\",\"dweb:/ipfs/QmSQrckghEjs6HVsA5GVgpNpZWvTXMY5eQLF7cN6deFeEg\"]},\"project:/contracts/interfaces/uniswap/IUniswapV3SwapCallback.sol\":{\"keccak256\":\"0x0b55e4b363711251c767e2ea579cdab2625e81857b2ccebe26060ce5bcf428f8\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://84473fcc963e6a4ff6d7db9f205c39938fd93050a2307030867c41d0bad04e82\",\"dweb:/ipfs/Qmc5LCzCejHES3kfqY55LH8n2GEYMCGHxc8rmjy5LX6xfz\"]},\"project:/contracts/interfaces/uniswap/SafeCast.sol\":{\"keccak256\":\"0x4c12bf820c0b011f5490a209960ca34dd8af34660ef9e01de0438393d15e3fd8\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://fed11489e218e55d087d42b4f350a30e10cd2aedec8f432bd3cc712f648d5869\",\"dweb:/ipfs/QmWfRnRxyXwHUDcTQPazxYYk5jxErGeQqdvnYtyg5nBPbU\"]},\"project:/contracts/interfaces/uniswap/TickLens.sol\":{\"keccak256\":\"0x675e09d7d3af3480552f2d975b92bd2807a625a1844199422cec05f2f4a368e3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://37d270f352a2e6a5eb4d0095f64beaa0b7cac8c5d5a615a002264126134aaf03\",\"dweb:/ipfs/Qmbnz7gdHPTLrkhpjEADKVfx1BWayqssQovv9XHPYsSjP6\"]},\"project:/contracts/interfaces/uniswap/TickMath.sol\":{\"keccak256\":\"0xda8c2c0b12d2976acfd364453ba5f5bf0117ba3c91175ee9e1067d3fb26944d9\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://3f3d2d7c2723c91830c74d96292f28fc1cfe28d388cdb9c1a5ebadb4c2b96f81\",\"dweb:/ipfs/QmYU4wk8MEm33wVWR38LoncvR7b8PP1mLuGBKX3dUpYJVE\"]},\"project:/contracts/swappa/ISwappaPairV1.sol\":{\"keccak256\":\"0x3ad68981bda91ed83c5e9ee8617f08bb5e208208477fb755cc77077f127010ab\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8e4390b1bebc39f58bff34b9099a646ead67cef27b722ef61548487251cca719\",\"dweb:/ipfs/QmRWEuYyjHaS957VKWtTfDpzfqkXb2bvEsS33meAC76ZuU\"]},\"project:/contracts/swappa/PairUniswapV3.sol\":{\"keccak256\":\"0x1c69a357a4b92b1cded2e90b09a68147bccd7e79b1555a4efedbb4c773c6810d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ac087e52f39bcd5b3080e133200db61feec43079e1d789ad2a856a9fc829bd4b\",\"dweb:/ipfs/QmRTBZK461pzGQD5d9QZWdYMLQosTe6wYw8zCVFs6sSBZW\"]}},\"version\":1}",
  "bytecode": "0x608060405234801561001057600080fd5b5061169f806100206000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c806332ef8314146100515780637eace89214610066578063b9fdbb481461008f578063fa461e33146100b6575b600080fd5b61006461005f366004610fcc565b6100c9565b005b610079610074366004611046565b610344565b604051610086919061163b565b60405180910390f35b6100a261009d3660046110ba565b610534565b60405161008698979695949392919061158d565b6100646100c4366004611136565b610568565b600061010a83838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061077692505050565b905060008673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161014791906113bc565b60206040518083038186803b15801561015f57600080fd5b505afa158015610173573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061019791906112f6565b9050600082905060008873ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b1580156101fd57600080fd5b505afa158015610211573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102359190610fa9565b73ffffffffffffffffffffffffffffffffffffffff161490508173ffffffffffffffffffffffffffffffffffffffff1663128acb088883610275876107bb565b856102945773fffd8963efd1fc6a506488495d951d5263988d2561029b565b6401000276a45b604080516000815260208101918290527fffffffff0000000000000000000000000000000000000000000000000000000060e088901b169091526102e6949392919060248101611403565b6040805180830381600087803b1580156102ff57600080fd5b505af1158015610313573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103379190611113565b5050505050505050505050565b60008061038684848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061077692505050565b9050600081905060007382825d0554fa07f7fc52ab63c961f330fdefa8e890508073ffffffffffffffffffffffffffffffffffffffff1663c6a5026a6040518060a001604052808c73ffffffffffffffffffffffffffffffffffffffff1681526020018b73ffffffffffffffffffffffffffffffffffffffff1681526020018a81526020018573ffffffffffffffffffffffffffffffffffffffff1663ddca3f436040518163ffffffff1660e01b815260040160206040518083038186803b15801561045157600080fd5b505afa158015610465573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061048991906112d3565b62ffffff16815260006020909101526040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526104d19190600401611538565b608060405180830381600087803b1580156104eb57600080fd5b505af11580156104ff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610523919061130e565b50919b9a5050505050505050505050565b6000806000606080606080606061054b8a8a6107ed565b975097509750975097509750975097509295985092959890939650565b60008060008613156105fc578590503373ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b1580156105bd57600080fd5b505afa1580156105d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f59190610fa9565b9150610689565b6000851315610689578490503373ffffffffffffffffffffffffffffffffffffffff1663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b15801561064e57600080fd5b505afa158015610662573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106869190610fa9565b91505b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83169063a9059cbb906106dd90339085906004016113dd565b602060405180830381600087803b1580156106f757600080fd5b505af115801561070b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061072f919061109a565b61076e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161076590611501565b60405180910390fd5b505050505050565b600081516014146107b3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610765906114ca565b506014015190565b60007f800000000000000000000000000000000000000000000000000000000000000082106107e957600080fd5b5090565b600080600060608060608060608973ffffffffffffffffffffffffffffffffffffffff16633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b15801561084057600080fd5b505afa158015610854573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108789190611240565b5050604080517f1a6865020000000000000000000000000000000000000000000000000000000081529051959d50939b505073ffffffffffffffffffffffffffffffffffffffff8e1693631a68650293600480820194506020935090829003018186803b1580156108e857600080fd5b505afa1580156108fc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109209190611187565b955060008a73ffffffffffffffffffffffffffffffffffffffff1663d0c93a7c6040518163ffffffff1660e01b815260040160206040518083038186803b15801561096a57600080fd5b505afa15801561097e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109a291906110f8565b905060008160020b8960020b816109b557fe5b05905060008960020b1280156109dc57508160020b8960020b816109d557fe5b0760020b15155b15610a04577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff015b600281810b60081d9060018d900b05810181610a218f8284610aa7565b909a509050610a318f8284610aa7565b9099509050610a418f8284610aa7565b5097505050600260018d900b0581037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8201610a7e8f8284610b91565b9097509050610a8e8f8284610b91565b509c9f9b9e50999c50979a969995985093965050505050565b6060825b8260010b8160010b13158015610ac057508151155b15610b89576040517f5339c29600000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff871690635339c29690610b1a9085906004016114ae565b60206040518083038186803b158015610b3257600080fd5b505afa158015610b46573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b6a91906112f6565b90508015610b8057610b7d868383610c92565b92505b50600101610aab565b935093915050565b6060825b8260010b8160010b12158015610baa57508151155b15610b89576040517f5339c29600000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff871690635339c29690610c049085906004016114ae565b60206040518083038186803b158015610c1c57600080fd5b505afa158015610c30573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c5491906112f6565b90508015610c6a57610c67868383610c92565b92505b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01610b95565b60606000805b610100811015610cbc576001811b841615610cb4576001909101905b600101610c98565b5060008573ffffffffffffffffffffffffffffffffffffffff1663d0c93a7c6040518163ffffffff1660e01b815260040160206040518083038186803b158015610d0557600080fd5b505afa158015610d19573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d3d91906110f8565b90508167ffffffffffffffff81118015610d5657600080fd5b50604051908082528060200260200182016040528015610d9057816020015b610d7d610ed4565b815260200190600190039081610d755790505b50925060005b610100811015610eca576001811b851615610ec2576040517ff30dba93000000000000000000000000000000000000000000000000000000008152600187900b60020b60081b8201830290600090819073ffffffffffffffffffffffffffffffffffffffff8b169063f30dba9390610e129086906004016114bc565b6101006040518083038186803b158015610e2b57600080fd5b505afa158015610e3f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e6391906111a2565b5050505050509150915060405180606001604052808460020b815260200182600f0b8152602001836fffffffffffffffffffffffffffffffff1681525087876001900397508781518110610eb357fe5b60200260200101819052505050505b600101610d96565b5050509392505050565b604080516060810182526000808252602082018190529181019190915290565b80518015158114610f0457600080fd5b92915050565b60008083601f840112610f1b578182fd5b50813567ffffffffffffffff811115610f32578182fd5b602083019150836020828501011115610f4a57600080fd5b9250929050565b8051600281900b8114610f0457600080fd5b80516fffffffffffffffffffffffffffffffff81168114610f0457600080fd5b805161ffff81168114610f0457600080fd5b805163ffffffff81168114610f0457600080fd5b600060208284031215610fba578081fd5b8151610fc581611644565b9392505050565b600080600080600060808688031215610fe3578081fd5b8535610fee81611644565b94506020860135610ffe81611644565b9350604086013561100e81611644565b9250606086013567ffffffffffffffff811115611029578182fd5b61103588828901610f0a565b969995985093965092949392505050565b60008060008060006080868803121561105d578081fd5b853561106881611644565b9450602086013561107881611644565b935060408601359250606086013567ffffffffffffffff811115611029578182fd5b6000602082840312156110ab578081fd5b81518015158114610fc5578182fd5b600080604083850312156110cc578182fd5b82356110d781611644565b91506020830135600181900b81146110ed578182fd5b809150509250929050565b600060208284031215611109578081fd5b610fc58383610f51565b60008060408385031215611125578182fd5b505080516020909101519092909150565b6000806000806060858703121561114b578384fd5b8435935060208501359250604085013567ffffffffffffffff81111561116f578283fd5b61117b87828801610f0a565b95989497509550505050565b600060208284031215611198578081fd5b610fc58383610f63565b600080600080600080600080610100898b0312156111be578586fd5b6111c88a8a610f63565b9750602089015180600f0b81146111dd578687fd5b80975050604089015195506060890151945060808901518060060b8114611202578384fd5b60a08a015190945061121381611644565b92506112228a60c08b01610f95565b91506112318a60e08b01610ef4565b90509295985092959890939650565b600080600080600080600060e0888a03121561125a578081fd5b875161126581611644565b96506112748960208a01610f51565b95506112838960408a01610f83565b94506112928960608a01610f83565b93506112a18960808a01610f83565b925060a088015160ff811681146112b6578182fd5b91506112c58960c08a01610ef4565b905092959891949750929550565b6000602082840312156112e4578081fd5b815162ffffff81168114610fc5578182fd5b600060208284031215611307578081fd5b5051919050565b60008060008060808587031215611323578182fd5b84519350602085015161133581611644565b92506113448660408701610f95565b6060959095015193969295505050565b6000815180845260208085019450808401835b838110156113b1578151805160020b885283810151600f0b848901526040908101516fffffffffffffffffffffffffffffffff169088015260609096019590820190600101611367565b509495945050505050565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b73ffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b600073ffffffffffffffffffffffffffffffffffffffff8088168352602087151581850152866040850152818616606085015260a06080850152845191508160a0850152825b828110156114655785810182015185820160c001528101611449565b82811115611476578360c084870101525b5050601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160c0019695505050505050565b60019190910b815260200190565b60029190910b815260200190565b6020808252601c908201527f50616972556e697377617056333a20696e76616c696420646174612100000000604082015260600190565b6020808252601f908201527f50616972556e697377617056333a207472616e73666572206661696c65642100604082015260600190565b815173ffffffffffffffffffffffffffffffffffffffff90811682526020808401518216908301526040808401519083015260608084015162ffffff1690830152608092830151169181019190915260a00190565b600061010073ffffffffffffffffffffffffffffffffffffffff8b1683528960020b60208401526fffffffffffffffffffffffffffffffff891660408401528060608401526115de81840189611354565b83810360808501526115f08189611354565b91505082810360a08401526116058187611354565b83810360c08501526116178187611354565b91505082810360e084015261162c8185611354565b9b9a5050505050505050505050565b90815260200190565b73ffffffffffffffffffffffffffffffffffffffff8116811461166657600080fd5b5056fea26469706673582212202519bd0fe8ef4e3dd4295bdb89991580b8c02a013da644108a320d4b41c1f93a64736f6c63430006080033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061004c5760003560e01c806332ef8314146100515780637eace89214610066578063b9fdbb481461008f578063fa461e33146100b6575b600080fd5b61006461005f366004610fcc565b6100c9565b005b610079610074366004611046565b610344565b604051610086919061163b565b60405180910390f35b6100a261009d3660046110ba565b610534565b60405161008698979695949392919061158d565b6100646100c4366004611136565b610568565b600061010a83838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061077692505050565b905060008673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161014791906113bc565b60206040518083038186803b15801561015f57600080fd5b505afa158015610173573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061019791906112f6565b9050600082905060008873ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b1580156101fd57600080fd5b505afa158015610211573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102359190610fa9565b73ffffffffffffffffffffffffffffffffffffffff161490508173ffffffffffffffffffffffffffffffffffffffff1663128acb088883610275876107bb565b856102945773fffd8963efd1fc6a506488495d951d5263988d2561029b565b6401000276a45b604080516000815260208101918290527fffffffff0000000000000000000000000000000000000000000000000000000060e088901b169091526102e6949392919060248101611403565b6040805180830381600087803b1580156102ff57600080fd5b505af1158015610313573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103379190611113565b5050505050505050505050565b60008061038684848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061077692505050565b9050600081905060007382825d0554fa07f7fc52ab63c961f330fdefa8e890508073ffffffffffffffffffffffffffffffffffffffff1663c6a5026a6040518060a001604052808c73ffffffffffffffffffffffffffffffffffffffff1681526020018b73ffffffffffffffffffffffffffffffffffffffff1681526020018a81526020018573ffffffffffffffffffffffffffffffffffffffff1663ddca3f436040518163ffffffff1660e01b815260040160206040518083038186803b15801561045157600080fd5b505afa158015610465573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061048991906112d3565b62ffffff16815260006020909101526040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526104d19190600401611538565b608060405180830381600087803b1580156104eb57600080fd5b505af11580156104ff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610523919061130e565b50919b9a5050505050505050505050565b6000806000606080606080606061054b8a8a6107ed565b975097509750975097509750975097509295985092959890939650565b60008060008613156105fc578590503373ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b1580156105bd57600080fd5b505afa1580156105d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f59190610fa9565b9150610689565b6000851315610689578490503373ffffffffffffffffffffffffffffffffffffffff1663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b15801561064e57600080fd5b505afa158015610662573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106869190610fa9565b91505b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83169063a9059cbb906106dd90339085906004016113dd565b602060405180830381600087803b1580156106f757600080fd5b505af115801561070b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061072f919061109a565b61076e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161076590611501565b60405180910390fd5b505050505050565b600081516014146107b3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610765906114ca565b506014015190565b60007f800000000000000000000000000000000000000000000000000000000000000082106107e957600080fd5b5090565b600080600060608060608060608973ffffffffffffffffffffffffffffffffffffffff16633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b15801561084057600080fd5b505afa158015610854573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108789190611240565b5050604080517f1a6865020000000000000000000000000000000000000000000000000000000081529051959d50939b505073ffffffffffffffffffffffffffffffffffffffff8e1693631a68650293600480820194506020935090829003018186803b1580156108e857600080fd5b505afa1580156108fc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109209190611187565b955060008a73ffffffffffffffffffffffffffffffffffffffff1663d0c93a7c6040518163ffffffff1660e01b815260040160206040518083038186803b15801561096a57600080fd5b505afa15801561097e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109a291906110f8565b905060008160020b8960020b816109b557fe5b05905060008960020b1280156109dc57508160020b8960020b816109d557fe5b0760020b15155b15610a04577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff015b600281810b60081d9060018d900b05810181610a218f8284610aa7565b909a509050610a318f8284610aa7565b9099509050610a418f8284610aa7565b5097505050600260018d900b0581037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8201610a7e8f8284610b91565b9097509050610a8e8f8284610b91565b509c9f9b9e50999c50979a969995985093965050505050565b6060825b8260010b8160010b13158015610ac057508151155b15610b89576040517f5339c29600000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff871690635339c29690610b1a9085906004016114ae565b60206040518083038186803b158015610b3257600080fd5b505afa158015610b46573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b6a91906112f6565b90508015610b8057610b7d868383610c92565b92505b50600101610aab565b935093915050565b6060825b8260010b8160010b12158015610baa57508151155b15610b89576040517f5339c29600000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff871690635339c29690610c049085906004016114ae565b60206040518083038186803b158015610c1c57600080fd5b505afa158015610c30573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c5491906112f6565b90508015610c6a57610c67868383610c92565b92505b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01610b95565b60606000805b610100811015610cbc576001811b841615610cb4576001909101905b600101610c98565b5060008573ffffffffffffffffffffffffffffffffffffffff1663d0c93a7c6040518163ffffffff1660e01b815260040160206040518083038186803b158015610d0557600080fd5b505afa158015610d19573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d3d91906110f8565b90508167ffffffffffffffff81118015610d5657600080fd5b50604051908082528060200260200182016040528015610d9057816020015b610d7d610ed4565b815260200190600190039081610d755790505b50925060005b610100811015610eca576001811b851615610ec2576040517ff30dba93000000000000000000000000000000000000000000000000000000008152600187900b60020b60081b8201830290600090819073ffffffffffffffffffffffffffffffffffffffff8b169063f30dba9390610e129086906004016114bc565b6101006040518083038186803b158015610e2b57600080fd5b505afa158015610e3f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e6391906111a2565b5050505050509150915060405180606001604052808460020b815260200182600f0b8152602001836fffffffffffffffffffffffffffffffff1681525087876001900397508781518110610eb357fe5b60200260200101819052505050505b600101610d96565b5050509392505050565b604080516060810182526000808252602082018190529181019190915290565b80518015158114610f0457600080fd5b92915050565b60008083601f840112610f1b578182fd5b50813567ffffffffffffffff811115610f32578182fd5b602083019150836020828501011115610f4a57600080fd5b9250929050565b8051600281900b8114610f0457600080fd5b80516fffffffffffffffffffffffffffffffff81168114610f0457600080fd5b805161ffff81168114610f0457600080fd5b805163ffffffff81168114610f0457600080fd5b600060208284031215610fba578081fd5b8151610fc581611644565b9392505050565b600080600080600060808688031215610fe3578081fd5b8535610fee81611644565b94506020860135610ffe81611644565b9350604086013561100e81611644565b9250606086013567ffffffffffffffff811115611029578182fd5b61103588828901610f0a565b969995985093965092949392505050565b60008060008060006080868803121561105d578081fd5b853561106881611644565b9450602086013561107881611644565b935060408601359250606086013567ffffffffffffffff811115611029578182fd5b6000602082840312156110ab578081fd5b81518015158114610fc5578182fd5b600080604083850312156110cc578182fd5b82356110d781611644565b91506020830135600181900b81146110ed578182fd5b809150509250929050565b600060208284031215611109578081fd5b610fc58383610f51565b60008060408385031215611125578182fd5b505080516020909101519092909150565b6000806000806060858703121561114b578384fd5b8435935060208501359250604085013567ffffffffffffffff81111561116f578283fd5b61117b87828801610f0a565b95989497509550505050565b600060208284031215611198578081fd5b610fc58383610f63565b600080600080600080600080610100898b0312156111be578586fd5b6111c88a8a610f63565b9750602089015180600f0b81146111dd578687fd5b80975050604089015195506060890151945060808901518060060b8114611202578384fd5b60a08a015190945061121381611644565b92506112228a60c08b01610f95565b91506112318a60e08b01610ef4565b90509295985092959890939650565b600080600080600080600060e0888a03121561125a578081fd5b875161126581611644565b96506112748960208a01610f51565b95506112838960408a01610f83565b94506112928960608a01610f83565b93506112a18960808a01610f83565b925060a088015160ff811681146112b6578182fd5b91506112c58960c08a01610ef4565b905092959891949750929550565b6000602082840312156112e4578081fd5b815162ffffff81168114610fc5578182fd5b600060208284031215611307578081fd5b5051919050565b60008060008060808587031215611323578182fd5b84519350602085015161133581611644565b92506113448660408701610f95565b6060959095015193969295505050565b6000815180845260208085019450808401835b838110156113b1578151805160020b885283810151600f0b848901526040908101516fffffffffffffffffffffffffffffffff169088015260609096019590820190600101611367565b509495945050505050565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b73ffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b600073ffffffffffffffffffffffffffffffffffffffff8088168352602087151581850152866040850152818616606085015260a06080850152845191508160a0850152825b828110156114655785810182015185820160c001528101611449565b82811115611476578360c084870101525b5050601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160c0019695505050505050565b60019190910b815260200190565b60029190910b815260200190565b6020808252601c908201527f50616972556e697377617056333a20696e76616c696420646174612100000000604082015260600190565b6020808252601f908201527f50616972556e697377617056333a207472616e73666572206661696c65642100604082015260600190565b815173ffffffffffffffffffffffffffffffffffffffff90811682526020808401518216908301526040808401519083015260608084015162ffffff1690830152608092830151169181019190915260a00190565b600061010073ffffffffffffffffffffffffffffffffffffffff8b1683528960020b60208401526fffffffffffffffffffffffffffffffff891660408401528060608401526115de81840189611354565b83810360808501526115f08189611354565b91505082810360a08401526116058187611354565b83810360c08501526116178187611354565b91505082810360e084015261162c8185611354565b9b9a5050505050505050505050565b90815260200190565b73ffffffffffffffffffffffffffffffffffffffff8116811461166657600080fd5b5056fea26469706673582212202519bd0fe8ef4e3dd4295bdb89991580b8c02a013da644108a320d4b41c1f93a64736f6c63430006080033",
  "immutableReferences": {},
  "sourceMap": "521:2693:58:-:0;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;521:2693:58;;;;;;;",
  "deployedSourceMap": "521:2693:58:-:0;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;521:2693:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;9;2:12;647:522:58;;;;;;;;;:::i;:::-;;1870:874;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;2747:465;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;1172:488;;;;;;;;;:::i;647:522::-;751:16;770:15;780:4;;770:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;770:9:58;;-1:-1:-1;;;770:15:58:i;:::-;751:34;;789:19;817:5;811:22;;;842:4;811:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;811:37:58;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;811:37:58;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;811:37:58;;;;;;;;;789:59;;852:19;889:8;852:46;;902:15;937:5;920:22;;:4;:11;;;:13;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;920:13:58;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;920:13:58;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;920:13:58;;;;;;;;;:22;;;902:40;;1003:4;:9;;;1017:2;1024:10;1039:22;:11;:20;:22::i;:::-;1066:10;:78;;1117:27;1066:78;;;1083:27;1066:78;1149:12;;;1159:1;1149:12;;;;;;;;;1003:162;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;1003:162:58;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1003:162:58;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;1003:162:58;;;;;;;;;;;647:522;;;;;;;;;:::o;1870:874::-;2003:17;2026:16;2045:15;2055:4;;2045:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;2045:9:58;;-1:-1:-1;;;2045:15:58:i;:::-;2026:34;;2064:19;2101:8;2064:46;;2469:16;2498:42;2469:72;;2562:6;:28;;;2591:148;;;;;;;;2643:5;2591:148;;;;;;2663:6;2591:148;;;;;;2704:8;2591:148;;;;2679:4;:8;;;:10;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;2679:10:58;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2679:10:58;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;2679:10:58;;;;;;;;;2591:148;;;;2736:1;2591:148;;;;;2562:178;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;2562:178:58;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2562:178:58;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;2562:178:58;;;;;;;;;-1:-1:-1;2545:195:58;;1870:874;-1:-1:-1;;;;;;;;;;;1870:874:58:o;2747:465::-;2837:20;2862:10;2877:17;2899:47;2951;3003;3055;3107;3171:37;3193:4;3199:8;3171:21;:37::i;:::-;3164:44;;;;;;;;;;;;;;;;2747:465;;;;;;;;;;;:::o;1172:488::-;1292:11;1307:14;1344:1;1329:12;:16;1325:240;;;1369:12;1352:30;;1416:10;1401:33;;;:35;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;1401:35:58;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1401:35:58;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;1401:35:58;;;;;;;;;1387:50;;1325:240;;;1467:1;1452:12;:16;1448:117;;;1492:12;1475:30;;1539:10;1524:33;;;:35;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;1524:35:58;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1524:35:58;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;1524:35:58;;;;;;;;;1510:50;;1448:117;1580:34;;;;;:14;;;;;;:34;;1595:10;;1607:6;;1580:34;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;1580:34:58;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1580:34:58;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;1580:34:58;;;;;;;;;1568:88;;;;;;;;;;;;;;;;;;;;;;1172:488;;;;;;:::o;1663:204::-;1729:16;1760:4;:11;1775:2;1760:17;1752:58;;;;;;;;;;;;;;-1:-1:-1;1856:2:58;1846:13;1840:20;;1823:41::o;924:121:38:-;976:8;1008:6;1004:1;:10;996:19;;12:1:-1;9;2:12;996:19:38;-1:-1:-1;1036:1:38;924:121::o;546:2213:42:-;687:20;721:10;745:17;776:38;828;880;932;984;1345:4;:10;;;:12;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;1345:12:42;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1345:12:42;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;1345:12:42;;;;;;;;;-1:-1:-1;;1379:16:42;;;;;;;;1047:310;;-1:-1:-1;1047:310:42;;-1:-1:-1;;1379:14:42;;;;;;:16;;;;;-1:-1:-1;1379:16:42;;-1:-1:-1;1379:16:42;;;;;;:14;:16;;;2:2:-1;;;;27:1;24;17:12;2:2;1379:16:42;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1379:16:42;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;1379:16:42;;;;;;;;;1367:28;;1406:17;1426:4;:16;;;:18;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;1426:18:42;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1426:18:42;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;1426:18:42;;;;;;;;;1406:38;;1454:16;1480:11;1473:18;;:4;:18;;;;;;;;1454:37;;1512:1;1505:4;:8;;;:35;;;;;1524:11;1517:18;;:4;:18;;;;;;;;:23;;;;1505:35;1501:53;;;1542:12;;1501:53;1677:15;;;;1691:1;1677:15;;1805:12;;;;;1787:30;;1677:15;1913:108;1944:4;1677:15;1787:30;1913:17;:108::i;:::-;1876:145;;-1:-1:-1;1876:145:42;-1:-1:-1;2068:108:42;2099:4;1876:145;2146:20;2068:17;:108::i;:::-;2031:145;;-1:-1:-1;2031:145:42;-1:-1:-1;2223:108:42;2254:4;2031:145;2301:20;2223:17;:108::i;:::-;-1:-1:-1;2186:145:42;-1:-1:-1;;;2394:1:42;2383:12;;;;;2365:30;;2423:19;;;2489:108;2520:4;2423:19;2365:30;2489:17;:108::i;:::-;2452:145;;-1:-1:-1;2452:145:42;-1:-1:-1;2644:108:42;2675:4;2452:145;2722:20;2644:17;:108::i;:::-;-1:-1:-1;546:2213:42;;;;-1:-1:-1;546:2213:42;;-1:-1:-1;546:2213:42;;;;;;-1:-1:-1;546:2213:42;;-1:-1:-1;;;;;546:2213:42:o;2765:718::-;2939:37;3051:15;3015:462;3099:18;3080:37;;:15;:37;;;;:67;;;;-1:-1:-1;3121:21:42;;:26;3080:67;3015:462;;;3223:32;;;;;3206:14;;3223:15;;;;;;:32;;3239:15;;3223:32;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;3223:32:42;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3223:32:42;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;3223:32:42;;;;;;;;;3206:49;-1:-1:-1;3273:10:42;;3269:198;;3320:132;3365:4;3391:15;3428:6;3320:23;:132::i;:::-;3303:149;;3269:198;-1:-1:-1;3180:1:42;3161:20;3015:462;;;2765:718;;;;;;:::o;3489:::-;3663:37;3775:15;3739:462;3823:18;3804:37;;:15;:37;;;;:67;;;;-1:-1:-1;3845:21:42;;:26;3804:67;3739:462;;;3947:32;;;;;3930:14;;3947:15;;;;;;:32;;3963:15;;3947:32;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;3947:32:42;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3947:32:42;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;3947:32:42;;;;;;;;;3930:49;-1:-1:-1;3997:10:42;;3993:198;;4044:132;4089:4;4115:15;4152:6;4044:23;:132::i;:::-;4027:149;;3993:198;-1:-1:-1;3885:20:42;;3739:462;;4213:1142;4359:37;4459:30;;4499:110;4523:3;4519:1;:7;4499:110;;;4561:1;:6;;4551:17;;:21;4547:51;;4574:24;;;;;4547:51;4528:3;;4499:110;;;;4656:17;4676:4;:16;;;:18;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;4676:18:42;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4676:18:42;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;4676:18:42;;;;;;;;;4656:38;;4741:22;4721:43;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;4721:43:42;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;4704:60:42;-1:-1:-1;4779:9:42;4774:575;4798:3;4794:1;:7;4774:575;;;4836:1;:6;;4826:17;;:21;4822:517;;5043:46;;;;;4891:22;;;;:27;;4917:1;4891:27;4890:60;;4889:76;;;4867:19;;;;5043:31;;;;;;:46;;4889:76;;5043:46;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;5043:46:42;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5043:46:42;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;5043:46:42;;;;;;;;;4983:106;;;;;;;;;;5150:174;;;;;;;;5192:13;5150:174;;;;;;5241:12;5150:174;;;;;;5291:14;5150:174;;;;;5107:14;5122:24;;;;;;;5107:40;;;;;;;;;;;;;:217;;;;4822:517;;;;4803:3;;4774:575;;;;4213:1142;;;;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;283:128::-;358:13;;23395;;23388:21;25625:32;;25615:2;;25671:1;;25661:12;25615:2;343:68;;;;;432:336;;;546:3;539:4;531:6;527:17;523:27;513:2;;-1:-1;;554:12;513:2;-1:-1;584:20;;624:18;613:30;;610:2;;;-1:-1;;646:12;610:2;690:4;682:6;678:17;666:29;;741:3;690:4;721:17;682:6;707:32;;704:41;701:2;;;758:1;;748:12;701:2;506:262;;;;;;1231:130;1307:13;;23799:1;23788:20;;;26156:33;;26146:2;;26203:1;;26193:12;1779:134;1857:13;;24063:34;24052:46;;26520:35;;26510:2;;26569:1;;26559:12;2061:132;2138:13;;24182:6;24171:18;;26643:34;;26633:2;;26691:1;;26681:12;2617:132;2694:13;;24573:10;24562:22;;27135:34;;27125:2;;27183:1;;27173:12;2893:263;;3008:2;2996:9;2987:7;2983:23;2979:32;2976:2;;;-1:-1;;3014:12;2976:2;226:6;220:13;238:33;265:5;238:33;;;3066:74;2970:186;-1:-1;;;2970:186;3163:741;;;;;;3337:3;3325:9;3316:7;3312:23;3308:33;3305:2;;;-1:-1;;3344:12;3305:2;85:6;72:20;97:33;124:5;97:33;;;3396:63;-1:-1;3496:2;3535:22;;72:20;97:33;72:20;97:33;;;3504:63;-1:-1;3604:2;3643:22;;72:20;97:33;72:20;97:33;;;3612:63;-1:-1;3740:2;3725:18;;3712:32;3764:18;3753:30;;3750:2;;;-1:-1;;3786:12;3750:2;3824:64;3880:7;3871:6;3860:9;3856:22;3824:64;;;3299:605;;;;-1:-1;3299:605;;-1:-1;3814:74;;;3299:605;-1:-1;;;3299:605;3911:741;;;;;;4085:3;4073:9;4064:7;4060:23;4056:33;4053:2;;;-1:-1;;4092:12;4053:2;85:6;72:20;97:33;124:5;97:33;;;4144:63;-1:-1;4244:2;4283:22;;72:20;97:33;72:20;97:33;;;4252:63;-1:-1;4352:2;4391:22;;2406:20;;-1:-1;4488:2;4473:18;;4460:32;4512:18;4501:30;;4498:2;;;-1:-1;;4534:12;4659:257;;4771:2;4759:9;4750:7;4746:23;4742:32;4739:2;;;-1:-1;;4777:12;4739:2;364:6;358:13;25650:5;23395:13;23388:21;25628:5;25625:32;25615:2;;-1:-1;;25661:12;4923:408;;;5065:2;5053:9;5044:7;5040:23;5036:32;5033:2;;;-1:-1;;5071:12;5033:2;879:6;866:20;891:56;941:5;891:56;;;5123:86;-1:-1;5246:2;5283:22;;1163:20;23707:1;23696:20;;;26036:33;;26026:2;;-1:-1;;26073:12;26026:2;5254:61;;;;5027:304;;;;;;5338:259;;5451:2;5439:9;5430:7;5426:23;5422:32;5419:2;;;-1:-1;;5457:12;5419:2;5519:62;5573:7;5549:22;5519:62;;5604:395;;;5734:2;5722:9;5713:7;5709:23;5705:32;5702:2;;;-1:-1;;5740:12;5702:2;-1:-1;;1580:13;;5902:2;5951:22;;;1580:13;;;;;-1:-1;5696:303;6006:611;;;;;6161:2;6149:9;6140:7;6136:23;6132:32;6129:2;;;-1:-1;;6167:12;6129:2;1447:6;1434:20;6219:62;;6318:2;6360:9;6356:22;1434:20;6326:62;;6453:2;6442:9;6438:18;6425:32;6477:18;6469:6;6466:30;6463:2;;;-1:-1;;6499:12;6463:2;6537:64;6593:7;6584:6;6573:9;6569:22;6537:64;;;6123:494;;;;-1:-1;6527:74;-1:-1;;;;6123:494;6624:263;;6739:2;6727:9;6718:7;6714:23;6710:32;6707:2;;;-1:-1;;6745:12;6707:2;6807:64;6863:7;6839:22;6807:64;;6894:1206;;;;;;;;;7121:3;7109:9;7100:7;7096:23;7092:33;7089:2;;;-1:-1;;7128:12;7089:2;7190:64;7246:7;7222:22;7190:64;;;7180:74;;7291:2;7344:9;7340:22;1036:13;25942:5;23614:2;23603:21;25918:5;25915:34;25905:2;;-1:-1;;25953:12;25905:2;7299:73;;;;7409:2;7463:9;7459:22;2554:13;7417:74;;7528:2;7582:9;7578:22;2554:13;7536:74;;7647:3;7700:9;7696:22;1718:13;26424:5;23969:1;23958:20;26401:5;26398:33;26388:2;;-1:-1;;26435:12;26388:2;7765:3;7816:22;;1998:13;7656:72;;-1:-1;2016:33;1998:13;2016:33;;;7774:74;-1:-1;7904:63;7959:7;7885:3;7935:22;;7904:63;;;7894:73;;8023:61;8076:7;8004:3;8056:9;8052:22;8023:61;;;8013:71;;7083:1017;;;;;;;;;;;;8107:1063;;;;;;;;8314:3;8302:9;8293:7;8289:23;8285:33;8282:2;;;-1:-1;;8321:12;8282:2;2004:6;1998:13;2016:33;2043:5;2016:33;;;8373:74;-1:-1;8502:62;8556:7;8484:2;8532:22;;8502:62;;;8492:72;;8619:63;8674:7;8601:2;8654:9;8650:22;8619:63;;;8609:73;;8737:63;8792:7;8719:2;8772:9;8768:22;8737:63;;;8727:73;;8856:63;8911:7;8837:3;8891:9;8887:22;8856:63;;;8846:73;;8956:3;9009:9;9005:22;2832:13;24667:4;27282:5;24656:16;27259:5;27256:33;27246:2;;-1:-1;;27293:12;27246:2;8965:72;-1:-1;9093:61;9146:7;9074:3;9122:22;;9093:61;;;9083:71;;8276:894;;;;;;;;;;;9177:261;;9291:2;9279:9;9270:7;9266:23;9262:32;9259:2;;;-1:-1;;9297:12;9259:2;2283:6;2277:13;24401:8;26916:5;24390:20;26892:5;26889:34;26879:2;;-1:-1;;26927:12;9445:263;;9560:2;9548:9;9539:7;9535:23;9531:32;9528:2;;;-1:-1;;9566:12;9528:2;-1:-1;2554:13;;9522:186;-1:-1;9522:186;9715:670;;;;;9880:3;9868:9;9859:7;9855:23;9851:33;9848:2;;;-1:-1;;9887:12;9848:2;2560:6;2554:13;9939:74;;10050:2;10104:9;10100:22;1998:13;2016:33;2043:5;2016:33;;;10058:74;-1:-1;10187:63;10242:7;10169:2;10218:22;;10187:63;;;10287:2;10337:22;;;;2554:13;9842:543;;;;-1:-1;;;9842:543;11152:938;;11438:5;22355:12;22832:6;22827:3;22820:19;22869:4;;22864:3;22860:14;11450:124;;22869:4;11676:5;22178:14;-1:-1;11715:353;11740:6;11737:1;11734:13;11715:353;;;11801:13;;14072:23;;23799:1;23788:20;12837:35;;14236:16;;;14230:23;23614:2;23603:21;14305:14;;;12618:36;14409:4;14398:16;;;14392:23;24063:34;24052:46;14469:14;;;15678:37;10679:4;10670:14;;;;22644;;;;11762:1;11755:9;11715:353;;;-1:-1;12074:10;;11338:752;-1:-1;;;;;11338:752;16414:222;24274:42;24263:54;;;;10908:37;;16541:2;16526:18;;16512:124;16643:349;24274:42;24263:54;;;;10777:58;;16978:2;16963:18;;13067:36;16806:2;16791:18;;16777:215;16999:736;;24274:42;;10938:5;24263:54;10915:3;10908:37;17407:2;12190:5;23395:13;23388:21;17407:2;17396:9;17392:18;12163:34;13096:5;17488:2;17477:9;17473:18;13067:36;24274:42;15938:5;24263:54;17571:2;17560:9;17556:18;15908:37;17248:3;17608;17597:9;17593:19;17586:49;12351:5;22355:12;12305:52;;22832:6;17248:3;17237:9;17233:19;22820;-1:-1;25136:101;25150:6;25147:1;25144:13;25136:101;;;25217:11;;;;;25211:18;25198:11;;;22860:14;25198:11;25191:39;25165:10;;25136:101;;;25252:6;25249:1;25246:13;25243:2;;;-1:-1;22860:14;25308:6;17237:9;25299:16;;25292:27;25243:2;-1:-1;;25428:2;25408:14;25424:7;25404:28;12508:39;;;;22860:14;12508:39;;17219:516;-1:-1;;;;;;17219:516;17742:214;23707:1;23696:20;;;;12733:35;;17865:2;17850:18;;17836:120;17963:214;23799:1;23788:20;;;;12837:35;;18086:2;18071:18;;18057:120;18184:416;18384:2;18398:47;;;13340:2;18369:18;;;22820:19;13376:30;22860:14;;;13356:51;13426:12;;;18355:245;18607:416;18807:2;18821:47;;;13677:2;18792:18;;;22820:19;13713:33;22860:14;;;13693:54;13766:12;;;18778:245;19030:403;14863:23;;24274:42;24263:54;;;10908:37;;15038:4;15027:16;;;15021:23;24263:54;;15098:14;;;10908:37;15196:4;15185:16;;;15179:23;15256:14;;;13067:36;15349:4;15338:16;;;15332:23;24401:8;24390:20;15407:14;;;16136:36;15514:4;15503:16;;;15497:23;24263:54;15574:14;;;10908:37;;;;19247:3;19232:19;;19218:215;19440:2356;;20319:3;24274:42;15938:5;24263:54;15915:3;15908:37;12865:5;23799:1;23788:20;20480:2;20469:9;20465:18;12837:35;24063:34;15708:5;24052:46;20563:2;20552:9;20548:18;15678:37;20319:3;20600:2;20589:9;20585:18;20578:48;20640:170;20319:3;20308:9;20304:19;20796:6;20640:170;;;20859:9;20853:4;20849:20;20843:3;20832:9;20828:19;20821:49;20884:170;21049:4;21040:6;20884:170;;;20876:178;;;21103:9;21097:4;21093:20;21087:3;21076:9;21072:19;21065:49;21128:170;21293:4;21284:6;21128:170;;;21347:9;21341:4;21337:20;21331:3;21320:9;21316:19;21309:49;21372:170;21537:4;21528:6;21372:170;;;21364:178;;;21591:9;21585:4;21581:20;21575:3;21564:9;21560:19;21553:49;21616:170;21781:4;21772:6;21616:170;;;21608:178;20290:1506;-1:-1;;;;;;;;;;;20290:1506;21803:222;13067:36;;;21930:2;21915:18;;21901:124;25445:117;24274:42;25532:5;24263:54;25507:5;25504:35;25494:2;;25553:1;;25543:12;25494:2;25488:74;",
  "source": "// SPDX-License-Identifier: MIT\npragma solidity 0.6.8;\npragma experimental ABIEncoderV2;\n\nimport \"@openzeppelin/contracts/math/SafeMath.sol\";\nimport \"@openzeppelin/contracts/token/ERC20/ERC20.sol\";\nimport \"../interfaces/uniswap/IUniswapV3Pool.sol\";\nimport \"../interfaces/uniswap/IUniswapV3SwapCallback.sol\";\nimport \"../interfaces/uniswap/IQuoterV2.sol\";\nimport \"../interfaces/uniswap/SafeCast.sol\";\nimport \"../interfaces/uniswap/TickLens.sol\";\nimport \"../interfaces/uniswap/TickMath.sol\";\nimport \"./ISwappaPairV1.sol\";\n\n\ncontract PairUniswapV3 is ISwappaPairV1, IUniswapV3SwapCallback {\n\tusing SafeMath for uint256;\n\tusing SafeCast for uint256;\n\n\tfunction swap(\n\t\taddress input,\n\t\taddress,\n\t\taddress to,\n\t\tbytes calldata data\n\t) external override {\n\t\taddress pairAddr = parseData(data);\n\t\tuint256 inputAmount = ERC20(input).balanceOf(address(this));\n\t\tIUniswapV3Pool pair = IUniswapV3Pool(pairAddr);\n\t\tbool zeroForOne = pair.token0() == input;\n\t\t// calling swap will trigger the uniswapV3SwapCallback\n\t\tpair.swap(\n\t\t\tto,\n\t\t\tzeroForOne,\n\t\t\tinputAmount.toInt256(),\n\t\t\tzeroForOne\n\t\t\t\t? TickMath.MIN_SQRT_RATIO + 1\n\t\t\t\t: TickMath.MAX_SQRT_RATIO - 1,\n\t\t\tnew bytes(0)\n\t\t);\n\t}\n\n\tfunction uniswapV3SwapCallback(\n\t\tint256 amount0Delta,\n\t\tint256 amount1Delta,\n\t\tbytes calldata\n\t) external override {\n\t\tERC20 token;\n\t\tuint256 amount;\n\t\tif (amount0Delta > 0) {\n\t\t\tamount = uint256(amount0Delta);\n\t\t\ttoken = ERC20(IUniswapV3Pool(msg.sender).token0());\n\t\t} else if (amount1Delta > 0) {\n\t\t\tamount = uint256(amount1Delta);\n\t\t\ttoken = ERC20(IUniswapV3Pool(msg.sender).token1());\n\t\t}\n\t\trequire(\n\t\t\ttoken.transfer(msg.sender, amount),\n\t\t\t\"PairUniswapV3: transfer failed!\"\n\t\t);\n\t}\n\n\tfunction parseData(bytes memory data)\n\t\tprivate\n\t\tpure\n\t\treturns (address pairAddr)\n\t{\n\t\trequire(data.length == 20, \"PairUniswapV3: invalid data!\");\n\t\tassembly {\n\t\t\tpairAddr := mload(add(data, 20))\n\t\t}\n\t}\n\n\tfunction getOutputAmount(\n\t\taddress input,\n\t\taddress output,\n\t\tuint256 amountIn,\n\t\tbytes calldata data\n\t) external override returns (uint256 amountOut) {\n\t\taddress pairAddr = parseData(data);\n\t\tIUniswapV3Pool pair = IUniswapV3Pool(pairAddr);\n\t\t// TODO(zviadm): This is hardcoded address for Univ3 QuoterV2 for Celo Mainnet.\n\t\t// For this to work on other chains, this would need to be fetched dynamically or\n\t\t// would have to be part of the constructor.\n\t\t// Alternatively, code from QuoterV2 could be ported inside here directly.\n\t\t// https://docs.uniswap.org/contracts/v3/reference/deployments\n\t\tIQuoterV2 quoter = IQuoterV2(0x82825d0554fA07f7FC52Ab63c961F330fdEFa8E8);\n\t\t(amountOut,,,) = quoter.quoteExactInputSingle(IQuoterV2.QuoteExactInputSingleParams({\n\t\t\ttokenIn: input,\n\t\t\ttokenOut: output,\n\t\t\tfee: pair.fee(),\n\t\t\tamountIn: amountIn,\n\t\t\tsqrtPriceLimitX96: 0}));\n\t}\n\n\tfunction getPoolTicks(IUniswapV3Pool pool, int16 maxLoopN)\n\t\tpublic\n\t\tview\n\t\treturns (\n\t\t\tuint160 sqrtPriceX96,\n\t\t\tint24 tick,\n\t\t\tuint128 liquidity,\n\t\t\tTickLens.PopulatedTick[] memory populatedTicks0,\n\t\t\tTickLens.PopulatedTick[] memory populatedTicks1,\n\t\t\tTickLens.PopulatedTick[] memory populatedTicks2,\n\t\t\tTickLens.PopulatedTick[] memory populatedTicks3,\n\t\t\tTickLens.PopulatedTick[] memory populatedTicks4\n\t\t)\n\t{\n\t\treturn TickLens.getPoolTicks(pool, maxLoopN);\n\t}\n}",
  "sourcePath": "/home/thezviad_gmail_com/src/swappa/contracts/swappa/PairUniswapV3.sol",
  "ast": {
    "absolutePath": "project:/contracts/swappa/PairUniswapV3.sol",
    "exportedSymbols": {
      "PairUniswapV3": [
        7559
      ]
    },
    "id": 7560,
    "license": "MIT",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 7294,
        "literals": [
          "solidity",
          "0.6",
          ".8"
        ],
        "nodeType": "PragmaDirective",
        "src": "32:22:58"
      },
      {
        "id": 7295,
        "literals": [
          "experimental",
          "ABIEncoderV2"
        ],
        "nodeType": "PragmaDirective",
        "src": "55:33:58"
      },
      {
        "absolutePath": "@openzeppelin/contracts/math/SafeMath.sol",
        "file": "@openzeppelin/contracts/math/SafeMath.sol",
        "id": 7296,
        "nodeType": "ImportDirective",
        "scope": 7560,
        "sourceUnit": 219,
        "src": "90:51:58",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@openzeppelin/contracts/token/ERC20/ERC20.sol",
        "file": "@openzeppelin/contracts/token/ERC20/ERC20.sol",
        "id": 7297,
        "nodeType": "ImportDirective",
        "scope": 7560,
        "sourceUnit": 726,
        "src": "142:55:58",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "project:/contracts/interfaces/uniswap/IUniswapV3Pool.sol",
        "file": "../interfaces/uniswap/IUniswapV3Pool.sol",
        "id": 7298,
        "nodeType": "ImportDirective",
        "scope": 7560,
        "sourceUnit": 2822,
        "src": "198:50:58",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "project:/contracts/interfaces/uniswap/IUniswapV3SwapCallback.sol",
        "file": "../interfaces/uniswap/IUniswapV3SwapCallback.sol",
        "id": 7299,
        "nodeType": "ImportDirective",
        "scope": 7560,
        "sourceUnit": 3080,
        "src": "249:58:58",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "project:/contracts/interfaces/uniswap/IQuoterV2.sol",
        "file": "../interfaces/uniswap/IQuoterV2.sol",
        "id": 7300,
        "nodeType": "ImportDirective",
        "scope": 7560,
        "sourceUnit": 2401,
        "src": "308:45:58",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "project:/contracts/interfaces/uniswap/SafeCast.sol",
        "file": "../interfaces/uniswap/SafeCast.sol",
        "id": 7301,
        "nodeType": "ImportDirective",
        "scope": 7560,
        "sourceUnit": 3332,
        "src": "354:44:58",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "project:/contracts/interfaces/uniswap/TickLens.sol",
        "file": "../interfaces/uniswap/TickLens.sol",
        "id": 7302,
        "nodeType": "ImportDirective",
        "scope": 7560,
        "sourceUnit": 4752,
        "src": "399:44:58",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "project:/contracts/interfaces/uniswap/TickMath.sol",
        "file": "../interfaces/uniswap/TickMath.sol",
        "id": 7303,
        "nodeType": "ImportDirective",
        "scope": 7560,
        "sourceUnit": 5283,
        "src": "444:44:58",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "project:/contracts/swappa/ISwappaPairV1.sol",
        "file": "./ISwappaPairV1.sol",
        "id": 7304,
        "nodeType": "ImportDirective",
        "scope": 7560,
        "sourceUnit": 5326,
        "src": "489:29:58",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 7305,
              "name": "ISwappaPairV1",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 5325,
              "src": "547:13:58",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ISwappaPairV1_$5325",
                "typeString": "contract ISwappaPairV1"
              }
            },
            "id": 7306,
            "nodeType": "InheritanceSpecifier",
            "src": "547:13:58"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 7307,
              "name": "IUniswapV3SwapCallback",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 3079,
              "src": "562:22:58",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IUniswapV3SwapCallback_$3079",
                "typeString": "contract IUniswapV3SwapCallback"
              }
            },
            "id": 7308,
            "nodeType": "InheritanceSpecifier",
            "src": "562:22:58"
          }
        ],
        "contractDependencies": [
          3079,
          5325
        ],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 7559,
        "linearizedBaseContracts": [
          7559,
          3079,
          5325
        ],
        "name": "PairUniswapV3",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "id": 7311,
            "libraryName": {
              "contractScope": null,
              "id": 7309,
              "name": "SafeMath",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 218,
              "src": "594:8:58",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_SafeMath_$218",
                "typeString": "library SafeMath"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "588:27:58",
            "typeName": {
              "id": 7310,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "607:7:58",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            }
          },
          {
            "id": 7314,
            "libraryName": {
              "contractScope": null,
              "id": 7312,
              "name": "SafeCast",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 3331,
              "src": "623:8:58",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_SafeCast_$3331",
                "typeString": "library SafeCast"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "617:27:58",
            "typeName": {
              "id": 7313,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "636:7:58",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            }
          },
          {
            "baseFunctions": [
              5311
            ],
            "body": {
              "id": 7382,
              "nodeType": "Block",
              "src": "747:422:58",
              "statements": [
                {
                  "assignments": [
                    7327
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7327,
                      "mutability": "mutable",
                      "name": "pairAddr",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 7382,
                      "src": "751:16:58",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 7326,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "751:7:58",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7331,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7329,
                        "name": "data",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7322,
                        "src": "780:4:58",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      ],
                      "id": 7328,
                      "name": "parseData",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7473,
                      "src": "770:9:58",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_address_$",
                        "typeString": "function (bytes memory) pure returns (address)"
                      }
                    },
                    "id": 7330,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "770:15:58",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "751:34:58"
                },
                {
                  "assignments": [
                    7333
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7333,
                      "mutability": "mutable",
                      "name": "inputAmount",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 7382,
                      "src": "789:19:58",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7332,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "789:7:58",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7343,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 7340,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -28,
                            "src": "842:4:58",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_PairUniswapV3_$7559",
                              "typeString": "contract PairUniswapV3"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_PairUniswapV3_$7559",
                              "typeString": "contract PairUniswapV3"
                            }
                          ],
                          "id": 7339,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "834:7:58",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 7338,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "834:7:58",
                            "typeDescriptions": {
                              "typeIdentifier": null,
                              "typeString": null
                            }
                          }
                        },
                        "id": 7341,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "834:13:58",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 7335,
                            "name": "input",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7316,
                            "src": "817:5:58",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 7334,
                          "name": "ERC20",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 725,
                          "src": "811:5:58",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_ERC20_$725_$",
                            "typeString": "type(contract ERC20)"
                          }
                        },
                        "id": 7336,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "811:12:58",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20_$725",
                          "typeString": "contract ERC20"
                        }
                      },
                      "id": 7337,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "balanceOf",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 325,
                      "src": "811:22:58",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                        "typeString": "function (address) view external returns (uint256)"
                      }
                    },
                    "id": 7342,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "811:37:58",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "789:59:58"
                },
                {
                  "assignments": [
                    7345
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7345,
                      "mutability": "mutable",
                      "name": "pair",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 7382,
                      "src": "852:19:58",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IUniswapV3Pool_$2821",
                        "typeString": "contract IUniswapV3Pool"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 7344,
                        "name": "IUniswapV3Pool",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 2821,
                        "src": "852:14:58",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IUniswapV3Pool_$2821",
                          "typeString": "contract IUniswapV3Pool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7349,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7347,
                        "name": "pairAddr",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7327,
                        "src": "889:8:58",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 7346,
                      "name": "IUniswapV3Pool",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2821,
                      "src": "874:14:58",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_IUniswapV3Pool_$2821_$",
                        "typeString": "type(contract IUniswapV3Pool)"
                      }
                    },
                    "id": 7348,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "874:24:58",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IUniswapV3Pool_$2821",
                      "typeString": "contract IUniswapV3Pool"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "852:46:58"
                },
                {
                  "assignments": [
                    7351
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7351,
                      "mutability": "mutable",
                      "name": "zeroForOne",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 7382,
                      "src": "902:15:58",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 7350,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "902:4:58",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7357,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 7356,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "expression": {
                          "argumentTypes": null,
                          "id": 7352,
                          "name": "pair",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7345,
                          "src": "920:4:58",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IUniswapV3Pool_$2821",
                            "typeString": "contract IUniswapV3Pool"
                          }
                        },
                        "id": 7353,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "token0",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 2932,
                        "src": "920:11:58",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
                          "typeString": "function () view external returns (address)"
                        }
                      },
                      "id": 7354,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "920:13:58",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 7355,
                      "name": "input",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7316,
                      "src": "937:5:58",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "920:22:58",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "902:40:58"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7361,
                        "name": "to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7320,
                        "src": "1017:2:58",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7362,
                        "name": "zeroForOne",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7351,
                        "src": "1024:10:58",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "argumentTypes": null,
                            "id": 7363,
                            "name": "inputAmount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7333,
                            "src": "1039:11:58",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 7364,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "toInt256",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 3330,
                          "src": "1039:20:58",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_int256_$bound_to$_t_uint256_$",
                            "typeString": "function (uint256) pure returns (int256)"
                          }
                        },
                        "id": 7365,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1039:22:58",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "condition": {
                          "argumentTypes": null,
                          "id": 7366,
                          "name": "zeroForOne",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7351,
                          "src": "1066:10:58",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          },
                          "id": 7374,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 7371,
                              "name": "TickMath",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5282,
                              "src": "1117:8:58",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_TickMath_$5282_$",
                                "typeString": "type(library TickMath)"
                              }
                            },
                            "id": 7372,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "MAX_SQRT_RATIO",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 4768,
                            "src": "1117:23:58",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint160",
                              "typeString": "uint160"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "-",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "31",
                            "id": 7373,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1143:1:58",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          },
                          "src": "1117:27:58",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          }
                        },
                        "id": 7375,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "Conditional",
                        "src": "1066:78:58",
                        "trueExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          },
                          "id": 7370,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 7367,
                              "name": "TickMath",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5282,
                              "src": "1083:8:58",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_TickMath_$5282_$",
                                "typeString": "type(library TickMath)"
                              }
                            },
                            "id": 7368,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "MIN_SQRT_RATIO",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 4765,
                            "src": "1083:23:58",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint160",
                              "typeString": "uint160"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "+",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "31",
                            "id": 7369,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1109:1:58",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          },
                          "src": "1083:27:58",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          }
                        },
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint160",
                          "typeString": "uint160"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 7378,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1159:1:58",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            }
                          ],
                          "id": 7377,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "NewExpression",
                          "src": "1149:9:58",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function (uint256) pure returns (bytes memory)"
                          },
                          "typeName": {
                            "id": 7376,
                            "name": "bytes",
                            "nodeType": "ElementaryTypeName",
                            "src": "1153:5:58",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_storage_ptr",
                              "typeString": "bytes"
                            }
                          }
                        },
                        "id": 7379,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1149:12:58",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        {
                          "typeIdentifier": "t_uint160",
                          "typeString": "uint160"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 7358,
                        "name": "pair",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7345,
                        "src": "1003:4:58",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IUniswapV3Pool_$2821",
                          "typeString": "contract IUniswapV3Pool"
                        }
                      },
                      "id": 7360,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "swap",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2898,
                      "src": "1003:9:58",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_bool_$_t_int256_$_t_uint160_$_t_bytes_memory_ptr_$returns$_t_int256_$_t_int256_$",
                        "typeString": "function (address,bool,int256,uint160,bytes memory) external returns (int256,int256)"
                      }
                    },
                    "id": 7380,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1003:162:58",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_int256_$_t_int256_$",
                      "typeString": "tuple(int256,int256)"
                    }
                  },
                  "id": 7381,
                  "nodeType": "ExpressionStatement",
                  "src": "1003:162:58"
                }
              ]
            },
            "documentation": null,
            "functionSelector": "32ef8314",
            "id": 7383,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "swap",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 7324,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "738:8:58"
            },
            "parameters": {
              "id": 7323,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7316,
                  "mutability": "mutable",
                  "name": "input",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 7383,
                  "src": "664:13:58",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7315,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "664:7:58",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7318,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 7383,
                  "src": "681:7:58",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7317,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "681:7:58",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7320,
                  "mutability": "mutable",
                  "name": "to",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 7383,
                  "src": "692:10:58",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7319,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "692:7:58",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7322,
                  "mutability": "mutable",
                  "name": "data",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 7383,
                  "src": "706:19:58",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 7321,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "706:5:58",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "660:68:58"
            },
            "returnParameters": {
              "id": 7325,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "747:0:58"
            },
            "scope": 7559,
            "src": "647:522:58",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              3078
            ],
            "body": {
              "id": 7455,
              "nodeType": "Block",
              "src": "1288:372:58",
              "statements": [
                {
                  "assignments": [
                    7394
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7394,
                      "mutability": "mutable",
                      "name": "token",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 7455,
                      "src": "1292:11:58",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ERC20_$725",
                        "typeString": "contract ERC20"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 7393,
                        "name": "ERC20",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 725,
                        "src": "1292:5:58",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20_$725",
                          "typeString": "contract ERC20"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7395,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1292:11:58"
                },
                {
                  "assignments": [
                    7397
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7397,
                      "mutability": "mutable",
                      "name": "amount",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 7455,
                      "src": "1307:14:58",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7396,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "1307:7:58",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7398,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1307:14:58"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    },
                    "id": 7401,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 7399,
                      "name": "amount0Delta",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7385,
                      "src": "1329:12:58",
                      "typeDescriptions": {
                        "typeIdentifier": "t_int256",
                        "typeString": "int256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 7400,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "1344:1:58",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "1329:16:58",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "condition": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_int256",
                        "typeString": "int256"
                      },
                      "id": 7423,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 7421,
                        "name": "amount1Delta",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7387,
                        "src": "1452:12:58",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": ">",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 7422,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1467:1:58",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "1452:16:58",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseBody": null,
                    "id": 7443,
                    "nodeType": "IfStatement",
                    "src": "1448:117:58",
                    "trueBody": {
                      "id": 7442,
                      "nodeType": "Block",
                      "src": "1470:95:58",
                      "statements": [
                        {
                          "expression": {
                            "argumentTypes": null,
                            "id": 7429,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "argumentTypes": null,
                              "id": 7424,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7397,
                              "src": "1475:6:58",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "=",
                            "rightHandSide": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 7427,
                                  "name": "amount1Delta",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7387,
                                  "src": "1492:12:58",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_int256",
                                    "typeString": "int256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_int256",
                                    "typeString": "int256"
                                  }
                                ],
                                "id": 7426,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "1484:7:58",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_uint256_$",
                                  "typeString": "type(uint256)"
                                },
                                "typeName": {
                                  "id": 7425,
                                  "name": "uint256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "1484:7:58",
                                  "typeDescriptions": {
                                    "typeIdentifier": null,
                                    "typeString": null
                                  }
                                }
                              },
                              "id": 7428,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "1484:21:58",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "1475:30:58",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 7430,
                          "nodeType": "ExpressionStatement",
                          "src": "1475:30:58"
                        },
                        {
                          "expression": {
                            "argumentTypes": null,
                            "id": 7440,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "argumentTypes": null,
                              "id": 7431,
                              "name": "token",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7394,
                              "src": "1510:5:58",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ERC20_$725",
                                "typeString": "contract ERC20"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "=",
                            "rightHandSide": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "arguments": [],
                                  "expression": {
                                    "argumentTypes": [],
                                    "expression": {
                                      "argumentTypes": null,
                                      "arguments": [
                                        {
                                          "argumentTypes": null,
                                          "expression": {
                                            "argumentTypes": null,
                                            "id": 7434,
                                            "name": "msg",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": -15,
                                            "src": "1539:3:58",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_magic_message",
                                              "typeString": "msg"
                                            }
                                          },
                                          "id": 7435,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "sender",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": null,
                                          "src": "1539:10:58",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_address_payable",
                                            "typeString": "address payable"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_address_payable",
                                            "typeString": "address payable"
                                          }
                                        ],
                                        "id": 7433,
                                        "name": "IUniswapV3Pool",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 2821,
                                        "src": "1524:14:58",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_contract$_IUniswapV3Pool_$2821_$",
                                          "typeString": "type(contract IUniswapV3Pool)"
                                        }
                                      },
                                      "id": 7436,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "typeConversion",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "1524:26:58",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_IUniswapV3Pool_$2821",
                                        "typeString": "contract IUniswapV3Pool"
                                      }
                                    },
                                    "id": 7437,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "token1",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 2938,
                                    "src": "1524:33:58",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
                                      "typeString": "function () view external returns (address)"
                                    }
                                  },
                                  "id": 7438,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "1524:35:58",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 7432,
                                "name": "ERC20",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 725,
                                "src": "1518:5:58",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_ERC20_$725_$",
                                  "typeString": "type(contract ERC20)"
                                }
                              },
                              "id": 7439,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "1518:42:58",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ERC20_$725",
                                "typeString": "contract ERC20"
                              }
                            },
                            "src": "1510:50:58",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ERC20_$725",
                              "typeString": "contract ERC20"
                            }
                          },
                          "id": 7441,
                          "nodeType": "ExpressionStatement",
                          "src": "1510:50:58"
                        }
                      ]
                    }
                  },
                  "id": 7444,
                  "nodeType": "IfStatement",
                  "src": "1325:240:58",
                  "trueBody": {
                    "id": 7420,
                    "nodeType": "Block",
                    "src": "1347:95:58",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 7407,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 7402,
                            "name": "amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7397,
                            "src": "1352:6:58",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 7405,
                                "name": "amount0Delta",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7385,
                                "src": "1369:12:58",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              ],
                              "id": 7404,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "1361:7:58",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_uint256_$",
                                "typeString": "type(uint256)"
                              },
                              "typeName": {
                                "id": 7403,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "1361:7:58",
                                "typeDescriptions": {
                                  "typeIdentifier": null,
                                  "typeString": null
                                }
                              }
                            },
                            "id": 7406,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1361:21:58",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "1352:30:58",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 7408,
                        "nodeType": "ExpressionStatement",
                        "src": "1352:30:58"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 7418,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 7409,
                            "name": "token",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7394,
                            "src": "1387:5:58",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ERC20_$725",
                              "typeString": "contract ERC20"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "expression": {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "expression": {
                                          "argumentTypes": null,
                                          "id": 7412,
                                          "name": "msg",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": -15,
                                          "src": "1416:3:58",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_magic_message",
                                            "typeString": "msg"
                                          }
                                        },
                                        "id": 7413,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "sender",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": null,
                                        "src": "1416:10:58",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address_payable",
                                          "typeString": "address payable"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address_payable",
                                          "typeString": "address payable"
                                        }
                                      ],
                                      "id": 7411,
                                      "name": "IUniswapV3Pool",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2821,
                                      "src": "1401:14:58",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_IUniswapV3Pool_$2821_$",
                                        "typeString": "type(contract IUniswapV3Pool)"
                                      }
                                    },
                                    "id": 7414,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "1401:26:58",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_IUniswapV3Pool_$2821",
                                      "typeString": "contract IUniswapV3Pool"
                                    }
                                  },
                                  "id": 7415,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "token0",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 2932,
                                  "src": "1401:33:58",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
                                    "typeString": "function () view external returns (address)"
                                  }
                                },
                                "id": 7416,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "1401:35:58",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 7410,
                              "name": "ERC20",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 725,
                              "src": "1395:5:58",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_ERC20_$725_$",
                                "typeString": "type(contract ERC20)"
                              }
                            },
                            "id": 7417,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1395:42:58",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ERC20_$725",
                              "typeString": "contract ERC20"
                            }
                          },
                          "src": "1387:50:58",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_ERC20_$725",
                            "typeString": "contract ERC20"
                          }
                        },
                        "id": 7419,
                        "nodeType": "ExpressionStatement",
                        "src": "1387:50:58"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 7448,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -15,
                              "src": "1595:3:58",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 7449,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "1595:10:58",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 7450,
                            "name": "amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7397,
                            "src": "1607:6:58",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 7446,
                            "name": "token",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7394,
                            "src": "1580:5:58",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ERC20_$725",
                              "typeString": "contract ERC20"
                            }
                          },
                          "id": 7447,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "transfer",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 346,
                          "src": "1580:14:58",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                            "typeString": "function (address,uint256) external returns (bool)"
                          }
                        },
                        "id": 7451,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1580:34:58",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "50616972556e697377617056333a207472616e73666572206661696c656421",
                        "id": 7452,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1619:33:58",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_75c1102e96d93d174ea8dedc52062057f9f6490e3028bddc1625570b348bbb03",
                          "typeString": "literal_string \"PairUniswapV3: transfer failed!\""
                        },
                        "value": "PairUniswapV3: transfer failed!"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_75c1102e96d93d174ea8dedc52062057f9f6490e3028bddc1625570b348bbb03",
                          "typeString": "literal_string \"PairUniswapV3: transfer failed!\""
                        }
                      ],
                      "id": 7445,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "1568:7:58",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 7453,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1568:88:58",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7454,
                  "nodeType": "ExpressionStatement",
                  "src": "1568:88:58"
                }
              ]
            },
            "documentation": null,
            "functionSelector": "fa461e33",
            "id": 7456,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "uniswapV3SwapCallback",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 7391,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "1279:8:58"
            },
            "parameters": {
              "id": 7390,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7385,
                  "mutability": "mutable",
                  "name": "amount0Delta",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 7456,
                  "src": "1206:19:58",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_int256",
                    "typeString": "int256"
                  },
                  "typeName": {
                    "id": 7384,
                    "name": "int256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1206:6:58",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7387,
                  "mutability": "mutable",
                  "name": "amount1Delta",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 7456,
                  "src": "1229:19:58",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_int256",
                    "typeString": "int256"
                  },
                  "typeName": {
                    "id": 7386,
                    "name": "int256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1229:6:58",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7389,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 7456,
                  "src": "1252:14:58",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 7388,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "1252:5:58",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1202:67:58"
            },
            "returnParameters": {
              "id": 7392,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1288:0:58"
            },
            "scope": 7559,
            "src": "1172:488:58",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 7472,
              "nodeType": "Block",
              "src": "1748:119:58",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 7467,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 7464,
                            "name": "data",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7458,
                            "src": "1760:4:58",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "id": 7465,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "1760:11:58",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "3230",
                          "id": 7466,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "1775:2:58",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_20_by_1",
                            "typeString": "int_const 20"
                          },
                          "value": "20"
                        },
                        "src": "1760:17:58",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "50616972556e697377617056333a20696e76616c6964206461746121",
                        "id": 7468,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1779:30:58",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_3a655746d51306e51f5a3e10521cd4e0bb1859f068ebc3833897fcb02620082c",
                          "typeString": "literal_string \"PairUniswapV3: invalid data!\""
                        },
                        "value": "PairUniswapV3: invalid data!"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_3a655746d51306e51f5a3e10521cd4e0bb1859f068ebc3833897fcb02620082c",
                          "typeString": "literal_string \"PairUniswapV3: invalid data!\""
                        }
                      ],
                      "id": 7463,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "1752:7:58",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 7469,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1752:58:58",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7470,
                  "nodeType": "ExpressionStatement",
                  "src": "1752:58:58"
                },
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "1823:41:58",
                    "statements": [
                      {
                        "nodeType": "YulAssignment",
                        "src": "1828:32:58",
                        "value": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "data",
                                  "nodeType": "YulIdentifier",
                                  "src": "1850:4:58"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "1856:2:58",
                                  "type": "",
                                  "value": "20"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "1846:3:58"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "1846:13:58"
                            }
                          ],
                          "functionName": {
                            "name": "mload",
                            "nodeType": "YulIdentifier",
                            "src": "1840:5:58"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "1840:20:58"
                        },
                        "variableNames": [
                          {
                            "name": "pairAddr",
                            "nodeType": "YulIdentifier",
                            "src": "1828:8:58"
                          }
                        ]
                      }
                    ]
                  },
                  "evmVersion": "istanbul",
                  "externalReferences": [
                    {
                      "declaration": 7458,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "1850:4:58",
                      "valueSize": 1
                    },
                    {
                      "declaration": 7461,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "1828:8:58",
                      "valueSize": 1
                    }
                  ],
                  "id": 7471,
                  "nodeType": "InlineAssembly",
                  "src": "1814:50:58"
                }
              ]
            },
            "documentation": null,
            "id": 7473,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "parseData",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 7459,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7458,
                  "mutability": "mutable",
                  "name": "data",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 7473,
                  "src": "1682:17:58",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 7457,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "1682:5:58",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1681:19:58"
            },
            "returnParameters": {
              "id": 7462,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7461,
                  "mutability": "mutable",
                  "name": "pairAddr",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 7473,
                  "src": "1729:16:58",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7460,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1729:7:58",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1728:18:58"
            },
            "scope": 7559,
            "src": "1663:204:58",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "private"
          },
          {
            "baseFunctions": [
              5324
            ],
            "body": {
              "id": 7522,
              "nodeType": "Block",
              "src": "2022:722:58",
              "statements": [
                {
                  "assignments": [
                    7488
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7488,
                      "mutability": "mutable",
                      "name": "pairAddr",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 7522,
                      "src": "2026:16:58",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 7487,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "2026:7:58",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7492,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7490,
                        "name": "data",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7481,
                        "src": "2055:4:58",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      ],
                      "id": 7489,
                      "name": "parseData",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7473,
                      "src": "2045:9:58",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_address_$",
                        "typeString": "function (bytes memory) pure returns (address)"
                      }
                    },
                    "id": 7491,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2045:15:58",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2026:34:58"
                },
                {
                  "assignments": [
                    7494
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7494,
                      "mutability": "mutable",
                      "name": "pair",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 7522,
                      "src": "2064:19:58",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IUniswapV3Pool_$2821",
                        "typeString": "contract IUniswapV3Pool"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 7493,
                        "name": "IUniswapV3Pool",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 2821,
                        "src": "2064:14:58",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IUniswapV3Pool_$2821",
                          "typeString": "contract IUniswapV3Pool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7498,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7496,
                        "name": "pairAddr",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7488,
                        "src": "2101:8:58",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 7495,
                      "name": "IUniswapV3Pool",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2821,
                      "src": "2086:14:58",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_IUniswapV3Pool_$2821_$",
                        "typeString": "type(contract IUniswapV3Pool)"
                      }
                    },
                    "id": 7497,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2086:24:58",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IUniswapV3Pool_$2821",
                      "typeString": "contract IUniswapV3Pool"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2064:46:58"
                },
                {
                  "assignments": [
                    7500
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7500,
                      "mutability": "mutable",
                      "name": "quoter",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 7522,
                      "src": "2469:16:58",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IQuoterV2_$2400",
                        "typeString": "contract IQuoterV2"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 7499,
                        "name": "IQuoterV2",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 2400,
                        "src": "2469:9:58",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IQuoterV2_$2400",
                          "typeString": "contract IQuoterV2"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7504,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "307838323832356430353534664130376637464335324162363363393631463333306664454661384538",
                        "id": 7502,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2498:42:58",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        "value": "0x82825d0554fA07f7FC52Ab63c961F330fdEFa8E8"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "id": 7501,
                      "name": "IQuoterV2",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2400,
                      "src": "2488:9:58",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_IQuoterV2_$2400_$",
                        "typeString": "type(contract IQuoterV2)"
                      }
                    },
                    "id": 7503,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2488:53:58",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IQuoterV2_$2400",
                      "typeString": "contract IQuoterV2"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2469:72:58"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7520,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "id": 7505,
                          "name": "amountOut",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7485,
                          "src": "2546:9:58",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        null,
                        null,
                        null
                      ],
                      "id": 7506,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "TupleExpression",
                      "src": "2545:14:58",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_uint256_$__$__$__$",
                        "typeString": "tuple(uint256,,,)"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 7511,
                              "name": "input",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7475,
                              "src": "2643:5:58",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 7512,
                              "name": "output",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7477,
                              "src": "2663:6:58",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 7513,
                                  "name": "pair",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7494,
                                  "src": "2679:4:58",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_IUniswapV3Pool_$2821",
                                    "typeString": "contract IUniswapV3Pool"
                                  }
                                },
                                "id": 7514,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "fee",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 2944,
                                "src": "2679:8:58",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_view$__$returns$_t_uint24_$",
                                  "typeString": "function () view external returns (uint24)"
                                }
                              },
                              "id": 7515,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "2679:10:58",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint24",
                                "typeString": "uint24"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 7516,
                              "name": "amountIn",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7479,
                              "src": "2704:8:58",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 7517,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2736:1:58",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint24",
                                "typeString": "uint24"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 7509,
                              "name": "IQuoterV2",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2400,
                              "src": "2591:9:58",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_IQuoterV2_$2400_$",
                                "typeString": "type(contract IQuoterV2)"
                              }
                            },
                            "id": 7510,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "QuoteExactInputSingleParams",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 2360,
                            "src": "2591:37:58",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_struct$_QuoteExactInputSingleParams_$2360_storage_ptr_$",
                              "typeString": "type(struct IQuoterV2.QuoteExactInputSingleParams storage pointer)"
                            }
                          },
                          "id": 7518,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "structConstructorCall",
                          "lValueRequested": false,
                          "names": [
                            "tokenIn",
                            "tokenOut",
                            "fee",
                            "amountIn",
                            "sqrtPriceLimitX96"
                          ],
                          "nodeType": "FunctionCall",
                          "src": "2591:148:58",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_QuoteExactInputSingleParams_$2360_memory_ptr",
                            "typeString": "struct IQuoterV2.QuoteExactInputSingleParams memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_struct$_QuoteExactInputSingleParams_$2360_memory_ptr",
                            "typeString": "struct IQuoterV2.QuoteExactInputSingleParams memory"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 7507,
                          "name": "quoter",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7500,
                          "src": "2562:6:58",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IQuoterV2_$2400",
                            "typeString": "contract IQuoterV2"
                          }
                        },
                        "id": 7508,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "quoteExactInputSingle",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 2374,
                        "src": "2562:28:58",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_nonpayable$_t_struct$_QuoteExactInputSingleParams_$2360_memory_ptr_$returns$_t_uint256_$_t_uint160_$_t_uint32_$_t_uint256_$",
                          "typeString": "function (struct IQuoterV2.QuoteExactInputSingleParams memory) external returns (uint256,uint160,uint32,uint256)"
                        }
                      },
                      "id": 7519,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2562:178:58",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_uint256_$_t_uint160_$_t_uint32_$_t_uint256_$",
                        "typeString": "tuple(uint256,uint160,uint32,uint256)"
                      }
                    },
                    "src": "2545:195:58",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7521,
                  "nodeType": "ExpressionStatement",
                  "src": "2545:195:58"
                }
              ]
            },
            "documentation": null,
            "functionSelector": "7eace892",
            "id": 7523,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getOutputAmount",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 7483,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "1985:8:58"
            },
            "parameters": {
              "id": 7482,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7475,
                  "mutability": "mutable",
                  "name": "input",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 7523,
                  "src": "1898:13:58",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7474,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1898:7:58",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7477,
                  "mutability": "mutable",
                  "name": "output",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 7523,
                  "src": "1915:14:58",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7476,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1915:7:58",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7479,
                  "mutability": "mutable",
                  "name": "amountIn",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 7523,
                  "src": "1933:16:58",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7478,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1933:7:58",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7481,
                  "mutability": "mutable",
                  "name": "data",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 7523,
                  "src": "1953:19:58",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 7480,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "1953:5:58",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1894:81:58"
            },
            "returnParameters": {
              "id": 7486,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7485,
                  "mutability": "mutable",
                  "name": "amountOut",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 7523,
                  "src": "2003:17:58",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7484,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2003:7:58",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2002:19:58"
            },
            "scope": 7559,
            "src": "1870:874:58",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 7557,
              "nodeType": "Block",
              "src": "3160:52:58",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7553,
                        "name": "pool",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7525,
                        "src": "3193:4:58",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IUniswapV3Pool_$2821",
                          "typeString": "contract IUniswapV3Pool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7554,
                        "name": "maxLoopN",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7527,
                        "src": "3199:8:58",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int16",
                          "typeString": "int16"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_IUniswapV3Pool_$2821",
                          "typeString": "contract IUniswapV3Pool"
                        },
                        {
                          "typeIdentifier": "t_int16",
                          "typeString": "int16"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 7551,
                        "name": "TickLens",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4751,
                        "src": "3171:8:58",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_TickLens_$4751_$",
                          "typeString": "type(library TickLens)"
                        }
                      },
                      "id": 7552,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "getPoolTicks",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 4530,
                      "src": "3171:21:58",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_contract$_IUniswapV3Pool_$2821_$_t_int16_$returns$_t_uint160_$_t_int24_$_t_uint128_$_t_array$_t_struct$_PopulatedTick_$4377_memory_ptr_$dyn_memory_ptr_$_t_array$_t_struct$_PopulatedTick_$4377_memory_ptr_$dyn_memory_ptr_$_t_array$_t_struct$_PopulatedTick_$4377_memory_ptr_$dyn_memory_ptr_$_t_array$_t_struct$_PopulatedTick_$4377_memory_ptr_$dyn_memory_ptr_$_t_array$_t_struct$_PopulatedTick_$4377_memory_ptr_$dyn_memory_ptr_$",
                        "typeString": "function (contract IUniswapV3Pool,int16) view returns (uint160,int24,uint128,struct TickLens.PopulatedTick memory[] memory,struct TickLens.PopulatedTick memory[] memory,struct TickLens.PopulatedTick memory[] memory,struct TickLens.PopulatedTick memory[] memory,struct TickLens.PopulatedTick memory[] memory)"
                      }
                    },
                    "id": 7555,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3171:37:58",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint160_$_t_int24_$_t_uint128_$_t_array$_t_struct$_PopulatedTick_$4377_memory_ptr_$dyn_memory_ptr_$_t_array$_t_struct$_PopulatedTick_$4377_memory_ptr_$dyn_memory_ptr_$_t_array$_t_struct$_PopulatedTick_$4377_memory_ptr_$dyn_memory_ptr_$_t_array$_t_struct$_PopulatedTick_$4377_memory_ptr_$dyn_memory_ptr_$_t_array$_t_struct$_PopulatedTick_$4377_memory_ptr_$dyn_memory_ptr_$",
                      "typeString": "tuple(uint160,int24,uint128,struct TickLens.PopulatedTick memory[] memory,struct TickLens.PopulatedTick memory[] memory,struct TickLens.PopulatedTick memory[] memory,struct TickLens.PopulatedTick memory[] memory,struct TickLens.PopulatedTick memory[] memory)"
                    }
                  },
                  "functionReturnParameters": 7550,
                  "id": 7556,
                  "nodeType": "Return",
                  "src": "3164:44:58"
                }
              ]
            },
            "documentation": null,
            "functionSelector": "b9fdbb48",
            "id": 7558,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getPoolTicks",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 7528,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7525,
                  "mutability": "mutable",
                  "name": "pool",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 7558,
                  "src": "2769:19:58",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IUniswapV3Pool_$2821",
                    "typeString": "contract IUniswapV3Pool"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 7524,
                    "name": "IUniswapV3Pool",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 2821,
                    "src": "2769:14:58",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IUniswapV3Pool_$2821",
                      "typeString": "contract IUniswapV3Pool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7527,
                  "mutability": "mutable",
                  "name": "maxLoopN",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 7558,
                  "src": "2790:14:58",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_int16",
                    "typeString": "int16"
                  },
                  "typeName": {
                    "id": 7526,
                    "name": "int16",
                    "nodeType": "ElementaryTypeName",
                    "src": "2790:5:58",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int16",
                      "typeString": "int16"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2768:37:58"
            },
            "returnParameters": {
              "id": 7550,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7530,
                  "mutability": "mutable",
                  "name": "sqrtPriceX96",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 7558,
                  "src": "2837:20:58",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint160",
                    "typeString": "uint160"
                  },
                  "typeName": {
                    "id": 7529,
                    "name": "uint160",
                    "nodeType": "ElementaryTypeName",
                    "src": "2837:7:58",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint160",
                      "typeString": "uint160"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7532,
                  "mutability": "mutable",
                  "name": "tick",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 7558,
                  "src": "2862:10:58",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_int24",
                    "typeString": "int24"
                  },
                  "typeName": {
                    "id": 7531,
                    "name": "int24",
                    "nodeType": "ElementaryTypeName",
                    "src": "2862:5:58",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int24",
                      "typeString": "int24"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7534,
                  "mutability": "mutable",
                  "name": "liquidity",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 7558,
                  "src": "2877:17:58",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint128",
                    "typeString": "uint128"
                  },
                  "typeName": {
                    "id": 7533,
                    "name": "uint128",
                    "nodeType": "ElementaryTypeName",
                    "src": "2877:7:58",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint128",
                      "typeString": "uint128"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7537,
                  "mutability": "mutable",
                  "name": "populatedTicks0",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 7558,
                  "src": "2899:47:58",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_struct$_PopulatedTick_$4377_memory_ptr_$dyn_memory_ptr",
                    "typeString": "struct TickLens.PopulatedTick[]"
                  },
                  "typeName": {
                    "baseType": {
                      "contractScope": null,
                      "id": 7535,
                      "name": "TickLens.PopulatedTick",
                      "nodeType": "UserDefinedTypeName",
                      "referencedDeclaration": 4377,
                      "src": "2899:22:58",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_PopulatedTick_$4377_storage_ptr",
                        "typeString": "struct TickLens.PopulatedTick"
                      }
                    },
                    "id": 7536,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "2899:24:58",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_struct$_PopulatedTick_$4377_storage_$dyn_storage_ptr",
                      "typeString": "struct TickLens.PopulatedTick[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7540,
                  "mutability": "mutable",
                  "name": "populatedTicks1",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 7558,
                  "src": "2951:47:58",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_struct$_PopulatedTick_$4377_memory_ptr_$dyn_memory_ptr",
                    "typeString": "struct TickLens.PopulatedTick[]"
                  },
                  "typeName": {
                    "baseType": {
                      "contractScope": null,
                      "id": 7538,
                      "name": "TickLens.PopulatedTick",
                      "nodeType": "UserDefinedTypeName",
                      "referencedDeclaration": 4377,
                      "src": "2951:22:58",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_PopulatedTick_$4377_storage_ptr",
                        "typeString": "struct TickLens.PopulatedTick"
                      }
                    },
                    "id": 7539,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "2951:24:58",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_struct$_PopulatedTick_$4377_storage_$dyn_storage_ptr",
                      "typeString": "struct TickLens.PopulatedTick[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7543,
                  "mutability": "mutable",
                  "name": "populatedTicks2",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 7558,
                  "src": "3003:47:58",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_struct$_PopulatedTick_$4377_memory_ptr_$dyn_memory_ptr",
                    "typeString": "struct TickLens.PopulatedTick[]"
                  },
                  "typeName": {
                    "baseType": {
                      "contractScope": null,
                      "id": 7541,
                      "name": "TickLens.PopulatedTick",
                      "nodeType": "UserDefinedTypeName",
                      "referencedDeclaration": 4377,
                      "src": "3003:22:58",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_PopulatedTick_$4377_storage_ptr",
                        "typeString": "struct TickLens.PopulatedTick"
                      }
                    },
                    "id": 7542,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "3003:24:58",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_struct$_PopulatedTick_$4377_storage_$dyn_storage_ptr",
                      "typeString": "struct TickLens.PopulatedTick[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7546,
                  "mutability": "mutable",
                  "name": "populatedTicks3",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 7558,
                  "src": "3055:47:58",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_struct$_PopulatedTick_$4377_memory_ptr_$dyn_memory_ptr",
                    "typeString": "struct TickLens.PopulatedTick[]"
                  },
                  "typeName": {
                    "baseType": {
                      "contractScope": null,
                      "id": 7544,
                      "name": "TickLens.PopulatedTick",
                      "nodeType": "UserDefinedTypeName",
                      "referencedDeclaration": 4377,
                      "src": "3055:22:58",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_PopulatedTick_$4377_storage_ptr",
                        "typeString": "struct TickLens.PopulatedTick"
                      }
                    },
                    "id": 7545,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "3055:24:58",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_struct$_PopulatedTick_$4377_storage_$dyn_storage_ptr",
                      "typeString": "struct TickLens.PopulatedTick[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7549,
                  "mutability": "mutable",
                  "name": "populatedTicks4",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 7558,
                  "src": "3107:47:58",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_struct$_PopulatedTick_$4377_memory_ptr_$dyn_memory_ptr",
                    "typeString": "struct TickLens.PopulatedTick[]"
                  },
                  "typeName": {
                    "baseType": {
                      "contractScope": null,
                      "id": 7547,
                      "name": "TickLens.PopulatedTick",
                      "nodeType": "UserDefinedTypeName",
                      "referencedDeclaration": 4377,
                      "src": "3107:22:58",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_PopulatedTick_$4377_storage_ptr",
                        "typeString": "struct TickLens.PopulatedTick"
                      }
                    },
                    "id": 7548,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "3107:24:58",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_struct$_PopulatedTick_$4377_storage_$dyn_storage_ptr",
                      "typeString": "struct TickLens.PopulatedTick[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2832:326:58"
            },
            "scope": 7559,
            "src": "2747:465:58",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          }
        ],
        "scope": 7560,
        "src": "521:2693:58"
      }
    ],
    "src": "32:3182:58"
  },
  "legacyAST": {
    "attributes": {
      "absolutePath": "project:/contracts/swappa/PairUniswapV3.sol",
      "exportedSymbols": {
        "PairUniswapV3": [
          7559
        ]
      },
      "license": "MIT"
    },
    "children": [
      {
        "attributes": {
          "literals": [
            "solidity",
            "0.6",
            ".8"
          ]
        },
        "id": 7294,
        "name": "PragmaDirective",
        "src": "32:22:58"
      },
      {
        "attributes": {
          "literals": [
            "experimental",
            "ABIEncoderV2"
          ]
        },
        "id": 7295,
        "name": "PragmaDirective",
        "src": "55:33:58"
      },
      {
        "attributes": {
          "SourceUnit": 219,
          "absolutePath": "@openzeppelin/contracts/math/SafeMath.sol",
          "file": "@openzeppelin/contracts/math/SafeMath.sol",
          "scope": 7560,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 7296,
        "name": "ImportDirective",
        "src": "90:51:58"
      },
      {
        "attributes": {
          "SourceUnit": 726,
          "absolutePath": "@openzeppelin/contracts/token/ERC20/ERC20.sol",
          "file": "@openzeppelin/contracts/token/ERC20/ERC20.sol",
          "scope": 7560,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 7297,
        "name": "ImportDirective",
        "src": "142:55:58"
      },
      {
        "attributes": {
          "SourceUnit": 2822,
          "absolutePath": "project:/contracts/interfaces/uniswap/IUniswapV3Pool.sol",
          "file": "../interfaces/uniswap/IUniswapV3Pool.sol",
          "scope": 7560,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 7298,
        "name": "ImportDirective",
        "src": "198:50:58"
      },
      {
        "attributes": {
          "SourceUnit": 3080,
          "absolutePath": "project:/contracts/interfaces/uniswap/IUniswapV3SwapCallback.sol",
          "file": "../interfaces/uniswap/IUniswapV3SwapCallback.sol",
          "scope": 7560,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 7299,
        "name": "ImportDirective",
        "src": "249:58:58"
      },
      {
        "attributes": {
          "SourceUnit": 2401,
          "absolutePath": "project:/contracts/interfaces/uniswap/IQuoterV2.sol",
          "file": "../interfaces/uniswap/IQuoterV2.sol",
          "scope": 7560,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 7300,
        "name": "ImportDirective",
        "src": "308:45:58"
      },
      {
        "attributes": {
          "SourceUnit": 3332,
          "absolutePath": "project:/contracts/interfaces/uniswap/SafeCast.sol",
          "file": "../interfaces/uniswap/SafeCast.sol",
          "scope": 7560,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 7301,
        "name": "ImportDirective",
        "src": "354:44:58"
      },
      {
        "attributes": {
          "SourceUnit": 4752,
          "absolutePath": "project:/contracts/interfaces/uniswap/TickLens.sol",
          "file": "../interfaces/uniswap/TickLens.sol",
          "scope": 7560,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 7302,
        "name": "ImportDirective",
        "src": "399:44:58"
      },
      {
        "attributes": {
          "SourceUnit": 5283,
          "absolutePath": "project:/contracts/interfaces/uniswap/TickMath.sol",
          "file": "../interfaces/uniswap/TickMath.sol",
          "scope": 7560,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 7303,
        "name": "ImportDirective",
        "src": "444:44:58"
      },
      {
        "attributes": {
          "SourceUnit": 5326,
          "absolutePath": "project:/contracts/swappa/ISwappaPairV1.sol",
          "file": "./ISwappaPairV1.sol",
          "scope": 7560,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 7304,
        "name": "ImportDirective",
        "src": "489:29:58"
      },
      {
        "attributes": {
          "abstract": false,
          "contractDependencies": [
            3079,
            5325
          ],
          "contractKind": "contract",
          "documentation": null,
          "fullyImplemented": true,
          "linearizedBaseContracts": [
            7559,
            3079,
            5325
          ],
          "name": "PairUniswapV3",
          "scope": 7560
        },
        "children": [
          {
            "attributes": {
              "arguments": null
            },
            "children": [
              {
                "attributes": {
                  "contractScope": null,
                  "name": "ISwappaPairV1",
                  "referencedDeclaration": 5325,
                  "type": "contract ISwappaPairV1"
                },
                "id": 7305,
                "name": "UserDefinedTypeName",
                "src": "547:13:58"
              }
            ],
            "id": 7306,
            "name": "InheritanceSpecifier",
            "src": "547:13:58"
          },
          {
            "attributes": {
              "arguments": null
            },
            "children": [
              {
                "attributes": {
                  "contractScope": null,
                  "name": "IUniswapV3SwapCallback",
                  "referencedDeclaration": 3079,
                  "type": "contract IUniswapV3SwapCallback"
                },
                "id": 7307,
                "name": "UserDefinedTypeName",
                "src": "562:22:58"
              }
            ],
            "id": 7308,
            "name": "InheritanceSpecifier",
            "src": "562:22:58"
          },
          {
            "children": [
              {
                "attributes": {
                  "contractScope": null,
                  "name": "SafeMath",
                  "referencedDeclaration": 218,
                  "type": "library SafeMath"
                },
                "id": 7309,
                "name": "UserDefinedTypeName",
                "src": "594:8:58"
              },
              {
                "attributes": {
                  "name": "uint256",
                  "type": "uint256"
                },
                "id": 7310,
                "name": "ElementaryTypeName",
                "src": "607:7:58"
              }
            ],
            "id": 7311,
            "name": "UsingForDirective",
            "src": "588:27:58"
          },
          {
            "children": [
              {
                "attributes": {
                  "contractScope": null,
                  "name": "SafeCast",
                  "referencedDeclaration": 3331,
                  "type": "library SafeCast"
                },
                "id": 7312,
                "name": "UserDefinedTypeName",
                "src": "623:8:58"
              },
              {
                "attributes": {
                  "name": "uint256",
                  "type": "uint256"
                },
                "id": 7313,
                "name": "ElementaryTypeName",
                "src": "636:7:58"
              }
            ],
            "id": 7314,
            "name": "UsingForDirective",
            "src": "617:27:58"
          },
          {
            "attributes": {
              "baseFunctions": [
                5311
              ],
              "documentation": null,
              "functionSelector": "32ef8314",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "swap",
              "scope": 7559,
              "stateMutability": "nonpayable",
              "virtual": false,
              "visibility": "external"
            },
            "children": [
              {
                "attributes": {
                  "overrides": [
                    null
                  ]
                },
                "id": 7324,
                "name": "OverrideSpecifier",
                "src": "738:8:58"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "input",
                      "overrides": null,
                      "scope": 7383,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 7315,
                        "name": "ElementaryTypeName",
                        "src": "664:7:58"
                      }
                    ],
                    "id": 7316,
                    "name": "VariableDeclaration",
                    "src": "664:13:58"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "",
                      "overrides": null,
                      "scope": 7383,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 7317,
                        "name": "ElementaryTypeName",
                        "src": "681:7:58"
                      }
                    ],
                    "id": 7318,
                    "name": "VariableDeclaration",
                    "src": "681:7:58"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "to",
                      "overrides": null,
                      "scope": 7383,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 7319,
                        "name": "ElementaryTypeName",
                        "src": "692:7:58"
                      }
                    ],
                    "id": 7320,
                    "name": "VariableDeclaration",
                    "src": "692:10:58"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "data",
                      "overrides": null,
                      "scope": 7383,
                      "stateVariable": false,
                      "storageLocation": "calldata",
                      "type": "bytes",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 7321,
                        "name": "ElementaryTypeName",
                        "src": "706:5:58"
                      }
                    ],
                    "id": 7322,
                    "name": "VariableDeclaration",
                    "src": "706:19:58"
                  }
                ],
                "id": 7323,
                "name": "ParameterList",
                "src": "660:68:58"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 7325,
                "name": "ParameterList",
                "src": "747:0:58"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "assignments": [
                        7327
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "pairAddr",
                          "overrides": null,
                          "scope": 7382,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "address",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "address",
                              "stateMutability": "nonpayable",
                              "type": "address"
                            },
                            "id": 7326,
                            "name": "ElementaryTypeName",
                            "src": "751:7:58"
                          }
                        ],
                        "id": 7327,
                        "name": "VariableDeclaration",
                        "src": "751:16:58"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "address",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes_calldata_ptr",
                                  "typeString": "bytes calldata"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 7473,
                              "type": "function (bytes memory) pure returns (address)",
                              "value": "parseData"
                            },
                            "id": 7328,
                            "name": "Identifier",
                            "src": "770:9:58"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 7322,
                              "type": "bytes calldata",
                              "value": "data"
                            },
                            "id": 7329,
                            "name": "Identifier",
                            "src": "780:4:58"
                          }
                        ],
                        "id": 7330,
                        "name": "FunctionCall",
                        "src": "770:15:58"
                      }
                    ],
                    "id": 7331,
                    "name": "VariableDeclarationStatement",
                    "src": "751:34:58"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        7333
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "inputAmount",
                          "overrides": null,
                          "scope": 7382,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint256",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint256",
                              "type": "uint256"
                            },
                            "id": 7332,
                            "name": "ElementaryTypeName",
                            "src": "789:7:58"
                          }
                        ],
                        "id": 7333,
                        "name": "VariableDeclaration",
                        "src": "789:19:58"
                      },
                      {
                        "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"
                                }
                              ],
                              "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": 7334,
                                    "name": "Identifier",
                                    "src": "811:5:58"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 7316,
                                      "type": "address",
                                      "value": "input"
                                    },
                                    "id": 7335,
                                    "name": "Identifier",
                                    "src": "817:5:58"
                                  }
                                ],
                                "id": 7336,
                                "name": "FunctionCall",
                                "src": "811:12:58"
                              }
                            ],
                            "id": 7337,
                            "name": "MemberAccess",
                            "src": "811:22:58"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "address",
                              "type_conversion": true
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_contract$_PairUniswapV3_$7559",
                                      "typeString": "contract PairUniswapV3"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "type": "type(address)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "name": "address",
                                      "type": null
                                    },
                                    "id": 7338,
                                    "name": "ElementaryTypeName",
                                    "src": "834:7:58"
                                  }
                                ],
                                "id": 7339,
                                "name": "ElementaryTypeNameExpression",
                                "src": "834:7:58"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": -28,
                                  "type": "contract PairUniswapV3",
                                  "value": "this"
                                },
                                "id": 7340,
                                "name": "Identifier",
                                "src": "842:4:58"
                              }
                            ],
                            "id": 7341,
                            "name": "FunctionCall",
                            "src": "834:13:58"
                          }
                        ],
                        "id": 7342,
                        "name": "FunctionCall",
                        "src": "811:37:58"
                      }
                    ],
                    "id": 7343,
                    "name": "VariableDeclarationStatement",
                    "src": "789:59:58"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        7345
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "pair",
                          "overrides": null,
                          "scope": 7382,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "contract IUniswapV3Pool",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "contractScope": null,
                              "name": "IUniswapV3Pool",
                              "referencedDeclaration": 2821,
                              "type": "contract IUniswapV3Pool"
                            },
                            "id": 7344,
                            "name": "UserDefinedTypeName",
                            "src": "852:14:58"
                          }
                        ],
                        "id": 7345,
                        "name": "VariableDeclaration",
                        "src": "852:19:58"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "contract IUniswapV3Pool",
                          "type_conversion": true
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2821,
                              "type": "type(contract IUniswapV3Pool)",
                              "value": "IUniswapV3Pool"
                            },
                            "id": 7346,
                            "name": "Identifier",
                            "src": "874:14:58"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 7327,
                              "type": "address",
                              "value": "pairAddr"
                            },
                            "id": 7347,
                            "name": "Identifier",
                            "src": "889:8:58"
                          }
                        ],
                        "id": 7348,
                        "name": "FunctionCall",
                        "src": "874:24:58"
                      }
                    ],
                    "id": 7349,
                    "name": "VariableDeclarationStatement",
                    "src": "852:46:58"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        7351
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "zeroForOne",
                          "overrides": null,
                          "scope": 7382,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "bool",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "bool",
                              "type": "bool"
                            },
                            "id": 7350,
                            "name": "ElementaryTypeName",
                            "src": "902:4:58"
                          }
                        ],
                        "id": 7351,
                        "name": "VariableDeclaration",
                        "src": "902:15:58"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "==",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "arguments": [
                                null
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "address",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    null
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "token0",
                                  "referencedDeclaration": 2932,
                                  "type": "function () view external returns (address)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 7345,
                                      "type": "contract IUniswapV3Pool",
                                      "value": "pair"
                                    },
                                    "id": 7352,
                                    "name": "Identifier",
                                    "src": "920:4:58"
                                  }
                                ],
                                "id": 7353,
                                "name": "MemberAccess",
                                "src": "920:11:58"
                              }
                            ],
                            "id": 7354,
                            "name": "FunctionCall",
                            "src": "920:13:58"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 7316,
                              "type": "address",
                              "value": "input"
                            },
                            "id": 7355,
                            "name": "Identifier",
                            "src": "937:5:58"
                          }
                        ],
                        "id": 7356,
                        "name": "BinaryOperation",
                        "src": "920:22:58"
                      }
                    ],
                    "id": 7357,
                    "name": "VariableDeclarationStatement",
                    "src": "902:40:58"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple(int256,int256)",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                },
                                {
                                  "typeIdentifier": "t_uint160",
                                  "typeString": "uint160"
                                },
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "swap",
                              "referencedDeclaration": 2898,
                              "type": "function (address,bool,int256,uint160,bytes memory) external returns (int256,int256)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 7345,
                                  "type": "contract IUniswapV3Pool",
                                  "value": "pair"
                                },
                                "id": 7358,
                                "name": "Identifier",
                                "src": "1003:4:58"
                              }
                            ],
                            "id": 7360,
                            "name": "MemberAccess",
                            "src": "1003:9:58"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 7320,
                              "type": "address",
                              "value": "to"
                            },
                            "id": 7361,
                            "name": "Identifier",
                            "src": "1017:2:58"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 7351,
                              "type": "bool",
                              "value": "zeroForOne"
                            },
                            "id": 7362,
                            "name": "Identifier",
                            "src": "1024:10:58"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "arguments": [
                                null
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "int256",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    null
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "toInt256",
                                  "referencedDeclaration": 3330,
                                  "type": "function (uint256) pure returns (int256)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 7333,
                                      "type": "uint256",
                                      "value": "inputAmount"
                                    },
                                    "id": 7363,
                                    "name": "Identifier",
                                    "src": "1039:11:58"
                                  }
                                ],
                                "id": 7364,
                                "name": "MemberAccess",
                                "src": "1039:20:58"
                              }
                            ],
                            "id": 7365,
                            "name": "FunctionCall",
                            "src": "1039:22:58"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "type": "uint160"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 7351,
                                  "type": "bool",
                                  "value": "zeroForOne"
                                },
                                "id": 7366,
                                "name": "Identifier",
                                "src": "1066:10:58"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint160",
                                    "typeString": "uint160"
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "+",
                                  "type": "uint160"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "MIN_SQRT_RATIO",
                                      "referencedDeclaration": 4765,
                                      "type": "uint160"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 5282,
                                          "type": "type(library TickMath)",
                                          "value": "TickMath"
                                        },
                                        "id": 7367,
                                        "name": "Identifier",
                                        "src": "1083:8:58"
                                      }
                                    ],
                                    "id": 7368,
                                    "name": "MemberAccess",
                                    "src": "1083:23:58"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "hexvalue": "31",
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "subdenomination": null,
                                      "token": "number",
                                      "type": "int_const 1",
                                      "value": "1"
                                    },
                                    "id": 7369,
                                    "name": "Literal",
                                    "src": "1109:1:58"
                                  }
                                ],
                                "id": 7370,
                                "name": "BinaryOperation",
                                "src": "1083:27:58"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint160",
                                    "typeString": "uint160"
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "-",
                                  "type": "uint160"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "MAX_SQRT_RATIO",
                                      "referencedDeclaration": 4768,
                                      "type": "uint160"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 5282,
                                          "type": "type(library TickMath)",
                                          "value": "TickMath"
                                        },
                                        "id": 7371,
                                        "name": "Identifier",
                                        "src": "1117:8:58"
                                      }
                                    ],
                                    "id": 7372,
                                    "name": "MemberAccess",
                                    "src": "1117:23:58"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "hexvalue": "31",
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "subdenomination": null,
                                      "token": "number",
                                      "type": "int_const 1",
                                      "value": "1"
                                    },
                                    "id": 7373,
                                    "name": "Literal",
                                    "src": "1143:1:58"
                                  }
                                ],
                                "id": 7374,
                                "name": "BinaryOperation",
                                "src": "1117:27:58"
                              }
                            ],
                            "id": 7375,
                            "name": "Conditional",
                            "src": "1066:78:58"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "bytes memory",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "type": "function (uint256) pure returns (bytes memory)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "name": "bytes",
                                      "type": "bytes"
                                    },
                                    "id": 7376,
                                    "name": "ElementaryTypeName",
                                    "src": "1153:5:58"
                                  }
                                ],
                                "id": 7377,
                                "name": "NewExpression",
                                "src": "1149:9:58"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "hexvalue": "30",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "subdenomination": null,
                                  "token": "number",
                                  "type": "int_const 0",
                                  "value": "0"
                                },
                                "id": 7378,
                                "name": "Literal",
                                "src": "1159:1:58"
                              }
                            ],
                            "id": 7379,
                            "name": "FunctionCall",
                            "src": "1149:12:58"
                          }
                        ],
                        "id": 7380,
                        "name": "FunctionCall",
                        "src": "1003:162:58"
                      }
                    ],
                    "id": 7381,
                    "name": "ExpressionStatement",
                    "src": "1003:162:58"
                  }
                ],
                "id": 7382,
                "name": "Block",
                "src": "747:422:58"
              }
            ],
            "id": 7383,
            "name": "FunctionDefinition",
            "src": "647:522:58"
          },
          {
            "attributes": {
              "baseFunctions": [
                3078
              ],
              "documentation": null,
              "functionSelector": "fa461e33",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "uniswapV3SwapCallback",
              "scope": 7559,
              "stateMutability": "nonpayable",
              "virtual": false,
              "visibility": "external"
            },
            "children": [
              {
                "attributes": {
                  "overrides": [
                    null
                  ]
                },
                "id": 7391,
                "name": "OverrideSpecifier",
                "src": "1279:8:58"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "amount0Delta",
                      "overrides": null,
                      "scope": 7456,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "int256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "int256",
                          "type": "int256"
                        },
                        "id": 7384,
                        "name": "ElementaryTypeName",
                        "src": "1206:6:58"
                      }
                    ],
                    "id": 7385,
                    "name": "VariableDeclaration",
                    "src": "1206:19:58"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "amount1Delta",
                      "overrides": null,
                      "scope": 7456,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "int256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "int256",
                          "type": "int256"
                        },
                        "id": 7386,
                        "name": "ElementaryTypeName",
                        "src": "1229:6:58"
                      }
                    ],
                    "id": 7387,
                    "name": "VariableDeclaration",
                    "src": "1229:19:58"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "",
                      "overrides": null,
                      "scope": 7456,
                      "stateVariable": false,
                      "storageLocation": "calldata",
                      "type": "bytes",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 7388,
                        "name": "ElementaryTypeName",
                        "src": "1252:5:58"
                      }
                    ],
                    "id": 7389,
                    "name": "VariableDeclaration",
                    "src": "1252:14:58"
                  }
                ],
                "id": 7390,
                "name": "ParameterList",
                "src": "1202:67:58"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 7392,
                "name": "ParameterList",
                "src": "1288:0:58"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "assignments": [
                        7394
                      ],
                      "initialValue": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "token",
                          "overrides": null,
                          "scope": 7455,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "contract ERC20",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "contractScope": null,
                              "name": "ERC20",
                              "referencedDeclaration": 725,
                              "type": "contract ERC20"
                            },
                            "id": 7393,
                            "name": "UserDefinedTypeName",
                            "src": "1292:5:58"
                          }
                        ],
                        "id": 7394,
                        "name": "VariableDeclaration",
                        "src": "1292:11:58"
                      }
                    ],
                    "id": 7395,
                    "name": "VariableDeclarationStatement",
                    "src": "1292:11:58"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        7397
                      ],
                      "initialValue": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "amount",
                          "overrides": null,
                          "scope": 7455,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint256",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint256",
                              "type": "uint256"
                            },
                            "id": 7396,
                            "name": "ElementaryTypeName",
                            "src": "1307:7:58"
                          }
                        ],
                        "id": 7397,
                        "name": "VariableDeclaration",
                        "src": "1307:14:58"
                      }
                    ],
                    "id": 7398,
                    "name": "VariableDeclarationStatement",
                    "src": "1307:14:58"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": ">",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 7385,
                              "type": "int256",
                              "value": "amount0Delta"
                            },
                            "id": 7399,
                            "name": "Identifier",
                            "src": "1329:12:58"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "30",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "number",
                              "type": "int_const 0",
                              "value": "0"
                            },
                            "id": 7400,
                            "name": "Literal",
                            "src": "1344:1:58"
                          }
                        ],
                        "id": 7401,
                        "name": "BinaryOperation",
                        "src": "1329:16:58"
                      },
                      {
                        "children": [
                          {
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "=",
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 7397,
                                      "type": "uint256",
                                      "value": "amount"
                                    },
                                    "id": 7402,
                                    "name": "Identifier",
                                    "src": "1352:6:58"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "isStructConstructorCall": false,
                                      "lValueRequested": false,
                                      "names": [
                                        null
                                      ],
                                      "tryCall": false,
                                      "type": "uint256",
                                      "type_conversion": true
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_int256",
                                              "typeString": "int256"
                                            }
                                          ],
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "type": "type(uint256)"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "name": "uint256",
                                              "type": null
                                            },
                                            "id": 7403,
                                            "name": "ElementaryTypeName",
                                            "src": "1361:7:58"
                                          }
                                        ],
                                        "id": 7404,
                                        "name": "ElementaryTypeNameExpression",
                                        "src": "1361:7:58"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 7385,
                                          "type": "int256",
                                          "value": "amount0Delta"
                                        },
                                        "id": 7405,
                                        "name": "Identifier",
                                        "src": "1369:12:58"
                                      }
                                    ],
                                    "id": 7406,
                                    "name": "FunctionCall",
                                    "src": "1361:21:58"
                                  }
                                ],
                                "id": 7407,
                                "name": "Assignment",
                                "src": "1352:30:58"
                              }
                            ],
                            "id": 7408,
                            "name": "ExpressionStatement",
                            "src": "1352:30:58"
                          },
                          {
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "=",
                                  "type": "contract ERC20"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 7394,
                                      "type": "contract ERC20",
                                      "value": "token"
                                    },
                                    "id": 7409,
                                    "name": "Identifier",
                                    "src": "1387:5:58"
                                  },
                                  {
                                    "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": 7410,
                                        "name": "Identifier",
                                        "src": "1395:5:58"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "arguments": [
                                            null
                                          ],
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "isStructConstructorCall": false,
                                          "lValueRequested": false,
                                          "names": [
                                            null
                                          ],
                                          "tryCall": false,
                                          "type": "address",
                                          "type_conversion": false
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": [
                                                null
                                              ],
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "member_name": "token0",
                                              "referencedDeclaration": 2932,
                                              "type": "function () view external returns (address)"
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": false,
                                                  "isStructConstructorCall": false,
                                                  "lValueRequested": false,
                                                  "names": [
                                                    null
                                                  ],
                                                  "tryCall": false,
                                                  "type": "contract IUniswapV3Pool",
                                                  "type_conversion": true
                                                },
                                                "children": [
                                                  {
                                                    "attributes": {
                                                      "argumentTypes": [
                                                        {
                                                          "typeIdentifier": "t_address_payable",
                                                          "typeString": "address payable"
                                                        }
                                                      ],
                                                      "overloadedDeclarations": [
                                                        null
                                                      ],
                                                      "referencedDeclaration": 2821,
                                                      "type": "type(contract IUniswapV3Pool)",
                                                      "value": "IUniswapV3Pool"
                                                    },
                                                    "id": 7411,
                                                    "name": "Identifier",
                                                    "src": "1401:14:58"
                                                  },
                                                  {
                                                    "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": 7412,
                                                        "name": "Identifier",
                                                        "src": "1416:3:58"
                                                      }
                                                    ],
                                                    "id": 7413,
                                                    "name": "MemberAccess",
                                                    "src": "1416:10:58"
                                                  }
                                                ],
                                                "id": 7414,
                                                "name": "FunctionCall",
                                                "src": "1401:26:58"
                                              }
                                            ],
                                            "id": 7415,
                                            "name": "MemberAccess",
                                            "src": "1401:33:58"
                                          }
                                        ],
                                        "id": 7416,
                                        "name": "FunctionCall",
                                        "src": "1401:35:58"
                                      }
                                    ],
                                    "id": 7417,
                                    "name": "FunctionCall",
                                    "src": "1395:42:58"
                                  }
                                ],
                                "id": 7418,
                                "name": "Assignment",
                                "src": "1387:50:58"
                              }
                            ],
                            "id": 7419,
                            "name": "ExpressionStatement",
                            "src": "1387:50:58"
                          }
                        ],
                        "id": 7420,
                        "name": "Block",
                        "src": "1347:95:58"
                      },
                      {
                        "attributes": {
                          "falseBody": null
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": ">",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 7387,
                                  "type": "int256",
                                  "value": "amount1Delta"
                                },
                                "id": 7421,
                                "name": "Identifier",
                                "src": "1452:12:58"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "hexvalue": "30",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "subdenomination": null,
                                  "token": "number",
                                  "type": "int_const 0",
                                  "value": "0"
                                },
                                "id": 7422,
                                "name": "Literal",
                                "src": "1467:1:58"
                              }
                            ],
                            "id": 7423,
                            "name": "BinaryOperation",
                            "src": "1452:16:58"
                          },
                          {
                            "children": [
                              {
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "operator": "=",
                                      "type": "uint256"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 7397,
                                          "type": "uint256",
                                          "value": "amount"
                                        },
                                        "id": 7424,
                                        "name": "Identifier",
                                        "src": "1475:6:58"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "isStructConstructorCall": false,
                                          "lValueRequested": false,
                                          "names": [
                                            null
                                          ],
                                          "tryCall": false,
                                          "type": "uint256",
                                          "type_conversion": true
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": [
                                                {
                                                  "typeIdentifier": "t_int256",
                                                  "typeString": "int256"
                                                }
                                              ],
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "lValueRequested": false,
                                              "type": "type(uint256)"
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "name": "uint256",
                                                  "type": null
                                                },
                                                "id": 7425,
                                                "name": "ElementaryTypeName",
                                                "src": "1484:7:58"
                                              }
                                            ],
                                            "id": 7426,
                                            "name": "ElementaryTypeNameExpression",
                                            "src": "1484:7:58"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 7387,
                                              "type": "int256",
                                              "value": "amount1Delta"
                                            },
                                            "id": 7427,
                                            "name": "Identifier",
                                            "src": "1492:12:58"
                                          }
                                        ],
                                        "id": 7428,
                                        "name": "FunctionCall",
                                        "src": "1484:21:58"
                                      }
                                    ],
                                    "id": 7429,
                                    "name": "Assignment",
                                    "src": "1475:30:58"
                                  }
                                ],
                                "id": 7430,
                                "name": "ExpressionStatement",
                                "src": "1475:30:58"
                              },
                              {
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "operator": "=",
                                      "type": "contract ERC20"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 7394,
                                          "type": "contract ERC20",
                                          "value": "token"
                                        },
                                        "id": 7431,
                                        "name": "Identifier",
                                        "src": "1510:5:58"
                                      },
                                      {
                                        "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": 7432,
                                            "name": "Identifier",
                                            "src": "1518:5:58"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "arguments": [
                                                null
                                              ],
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "isStructConstructorCall": false,
                                              "lValueRequested": false,
                                              "names": [
                                                null
                                              ],
                                              "tryCall": false,
                                              "type": "address",
                                              "type_conversion": false
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "argumentTypes": [
                                                    null
                                                  ],
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": false,
                                                  "lValueRequested": false,
                                                  "member_name": "token1",
                                                  "referencedDeclaration": 2938,
                                                  "type": "function () view external returns (address)"
                                                },
                                                "children": [
                                                  {
                                                    "attributes": {
                                                      "argumentTypes": null,
                                                      "isConstant": false,
                                                      "isLValue": false,
                                                      "isPure": false,
                                                      "isStructConstructorCall": false,
                                                      "lValueRequested": false,
                                                      "names": [
                                                        null
                                                      ],
                                                      "tryCall": false,
                                                      "type": "contract IUniswapV3Pool",
                                                      "type_conversion": true
                                                    },
                                                    "children": [
                                                      {
                                                        "attributes": {
                                                          "argumentTypes": [
                                                            {
                                                              "typeIdentifier": "t_address_payable",
                                                              "typeString": "address payable"
                                                            }
                                                          ],
                                                          "overloadedDeclarations": [
                                                            null
                                                          ],
                                                          "referencedDeclaration": 2821,
                                                          "type": "type(contract IUniswapV3Pool)",
                                                          "value": "IUniswapV3Pool"
                                                        },
                                                        "id": 7433,
                                                        "name": "Identifier",
                                                        "src": "1524:14:58"
                                                      },
                                                      {
                                                        "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": 7434,
                                                            "name": "Identifier",
                                                            "src": "1539:3:58"
                                                          }
                                                        ],
                                                        "id": 7435,
                                                        "name": "MemberAccess",
                                                        "src": "1539:10:58"
                                                      }
                                                    ],
                                                    "id": 7436,
                                                    "name": "FunctionCall",
                                                    "src": "1524:26:58"
                                                  }
                                                ],
                                                "id": 7437,
                                                "name": "MemberAccess",
                                                "src": "1524:33:58"
                                              }
                                            ],
                                            "id": 7438,
                                            "name": "FunctionCall",
                                            "src": "1524:35:58"
                                          }
                                        ],
                                        "id": 7439,
                                        "name": "FunctionCall",
                                        "src": "1518:42:58"
                                      }
                                    ],
                                    "id": 7440,
                                    "name": "Assignment",
                                    "src": "1510:50:58"
                                  }
                                ],
                                "id": 7441,
                                "name": "ExpressionStatement",
                                "src": "1510:50:58"
                              }
                            ],
                            "id": 7442,
                            "name": "Block",
                            "src": "1470:95:58"
                          }
                        ],
                        "id": 7443,
                        "name": "IfStatement",
                        "src": "1448:117:58"
                      }
                    ],
                    "id": 7444,
                    "name": "IfStatement",
                    "src": "1325:240:58"
                  },
                  {
                    "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_75c1102e96d93d174ea8dedc52062057f9f6490e3028bddc1625570b348bbb03",
                                  "typeString": "literal_string \"PairUniswapV3: transfer failed!\""
                                }
                              ],
                              "overloadedDeclarations": [
                                -18,
                                -18
                              ],
                              "referencedDeclaration": -18,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 7445,
                            "name": "Identifier",
                            "src": "1568:7:58"
                          },
                          {
                            "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_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,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 7394,
                                      "type": "contract ERC20",
                                      "value": "token"
                                    },
                                    "id": 7446,
                                    "name": "Identifier",
                                    "src": "1580:5:58"
                                  }
                                ],
                                "id": 7447,
                                "name": "MemberAccess",
                                "src": "1580:14:58"
                              },
                              {
                                "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": 7448,
                                    "name": "Identifier",
                                    "src": "1595:3:58"
                                  }
                                ],
                                "id": 7449,
                                "name": "MemberAccess",
                                "src": "1595:10:58"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 7397,
                                  "type": "uint256",
                                  "value": "amount"
                                },
                                "id": 7450,
                                "name": "Identifier",
                                "src": "1607:6:58"
                              }
                            ],
                            "id": 7451,
                            "name": "FunctionCall",
                            "src": "1580:34:58"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "50616972556e697377617056333a207472616e73666572206661696c656421",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "string",
                              "type": "literal_string \"PairUniswapV3: transfer failed!\"",
                              "value": "PairUniswapV3: transfer failed!"
                            },
                            "id": 7452,
                            "name": "Literal",
                            "src": "1619:33:58"
                          }
                        ],
                        "id": 7453,
                        "name": "FunctionCall",
                        "src": "1568:88:58"
                      }
                    ],
                    "id": 7454,
                    "name": "ExpressionStatement",
                    "src": "1568:88:58"
                  }
                ],
                "id": 7455,
                "name": "Block",
                "src": "1288:372:58"
              }
            ],
            "id": 7456,
            "name": "FunctionDefinition",
            "src": "1172:488:58"
          },
          {
            "attributes": {
              "documentation": null,
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "parseData",
              "overrides": null,
              "scope": 7559,
              "stateMutability": "pure",
              "virtual": false,
              "visibility": "private"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "data",
                      "overrides": null,
                      "scope": 7473,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "bytes",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 7457,
                        "name": "ElementaryTypeName",
                        "src": "1682:5:58"
                      }
                    ],
                    "id": 7458,
                    "name": "VariableDeclaration",
                    "src": "1682:17:58"
                  }
                ],
                "id": 7459,
                "name": "ParameterList",
                "src": "1681:19:58"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "pairAddr",
                      "overrides": null,
                      "scope": 7473,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 7460,
                        "name": "ElementaryTypeName",
                        "src": "1729:7:58"
                      }
                    ],
                    "id": 7461,
                    "name": "VariableDeclaration",
                    "src": "1729:16:58"
                  }
                ],
                "id": 7462,
                "name": "ParameterList",
                "src": "1728:18:58"
              },
              {
                "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_3a655746d51306e51f5a3e10521cd4e0bb1859f068ebc3833897fcb02620082c",
                                  "typeString": "literal_string \"PairUniswapV3: invalid data!\""
                                }
                              ],
                              "overloadedDeclarations": [
                                -18,
                                -18
                              ],
                              "referencedDeclaration": -18,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 7463,
                            "name": "Identifier",
                            "src": "1752:7:58"
                          },
                          {
                            "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": 7458,
                                      "type": "bytes memory",
                                      "value": "data"
                                    },
                                    "id": 7464,
                                    "name": "Identifier",
                                    "src": "1760:4:58"
                                  }
                                ],
                                "id": 7465,
                                "name": "MemberAccess",
                                "src": "1760:11:58"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "hexvalue": "3230",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "subdenomination": null,
                                  "token": "number",
                                  "type": "int_const 20",
                                  "value": "20"
                                },
                                "id": 7466,
                                "name": "Literal",
                                "src": "1775:2:58"
                              }
                            ],
                            "id": 7467,
                            "name": "BinaryOperation",
                            "src": "1760:17:58"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "50616972556e697377617056333a20696e76616c6964206461746121",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "string",
                              "type": "literal_string \"PairUniswapV3: invalid data!\"",
                              "value": "PairUniswapV3: invalid data!"
                            },
                            "id": 7468,
                            "name": "Literal",
                            "src": "1779:30:58"
                          }
                        ],
                        "id": 7469,
                        "name": "FunctionCall",
                        "src": "1752:58:58"
                      }
                    ],
                    "id": 7470,
                    "name": "ExpressionStatement",
                    "src": "1752:58:58"
                  },
                  {
                    "attributes": {
                      "evmVersion": "istanbul",
                      "externalReferences": [
                        {
                          "declaration": 7458,
                          "isOffset": false,
                          "isSlot": false,
                          "src": "1850:4:58",
                          "valueSize": 1
                        },
                        {
                          "declaration": 7461,
                          "isOffset": false,
                          "isSlot": false,
                          "src": "1828:8:58",
                          "valueSize": 1
                        }
                      ],
                      "operations": "{\n    pairAddr := mload(add(data, 20))\n}"
                    },
                    "children": [],
                    "id": 7471,
                    "name": "InlineAssembly",
                    "src": "1814:50:58"
                  }
                ],
                "id": 7472,
                "name": "Block",
                "src": "1748:119:58"
              }
            ],
            "id": 7473,
            "name": "FunctionDefinition",
            "src": "1663:204:58"
          },
          {
            "attributes": {
              "baseFunctions": [
                5324
              ],
              "documentation": null,
              "functionSelector": "7eace892",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "getOutputAmount",
              "scope": 7559,
              "stateMutability": "nonpayable",
              "virtual": false,
              "visibility": "external"
            },
            "children": [
              {
                "attributes": {
                  "overrides": [
                    null
                  ]
                },
                "id": 7483,
                "name": "OverrideSpecifier",
                "src": "1985:8:58"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "input",
                      "overrides": null,
                      "scope": 7523,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 7474,
                        "name": "ElementaryTypeName",
                        "src": "1898:7:58"
                      }
                    ],
                    "id": 7475,
                    "name": "VariableDeclaration",
                    "src": "1898:13:58"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "output",
                      "overrides": null,
                      "scope": 7523,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 7476,
                        "name": "ElementaryTypeName",
                        "src": "1915:7:58"
                      }
                    ],
                    "id": 7477,
                    "name": "VariableDeclaration",
                    "src": "1915:14:58"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "amountIn",
                      "overrides": null,
                      "scope": 7523,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 7478,
                        "name": "ElementaryTypeName",
                        "src": "1933:7:58"
                      }
                    ],
                    "id": 7479,
                    "name": "VariableDeclaration",
                    "src": "1933:16:58"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "data",
                      "overrides": null,
                      "scope": 7523,
                      "stateVariable": false,
                      "storageLocation": "calldata",
                      "type": "bytes",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 7480,
                        "name": "ElementaryTypeName",
                        "src": "1953:5:58"
                      }
                    ],
                    "id": 7481,
                    "name": "VariableDeclaration",
                    "src": "1953:19:58"
                  }
                ],
                "id": 7482,
                "name": "ParameterList",
                "src": "1894:81:58"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "amountOut",
                      "overrides": null,
                      "scope": 7523,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 7484,
                        "name": "ElementaryTypeName",
                        "src": "2003:7:58"
                      }
                    ],
                    "id": 7485,
                    "name": "VariableDeclaration",
                    "src": "2003:17:58"
                  }
                ],
                "id": 7486,
                "name": "ParameterList",
                "src": "2002:19:58"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "assignments": [
                        7488
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "pairAddr",
                          "overrides": null,
                          "scope": 7522,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "address",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "address",
                              "stateMutability": "nonpayable",
                              "type": "address"
                            },
                            "id": 7487,
                            "name": "ElementaryTypeName",
                            "src": "2026:7:58"
                          }
                        ],
                        "id": 7488,
                        "name": "VariableDeclaration",
                        "src": "2026:16:58"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "address",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes_calldata_ptr",
                                  "typeString": "bytes calldata"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 7473,
                              "type": "function (bytes memory) pure returns (address)",
                              "value": "parseData"
                            },
                            "id": 7489,
                            "name": "Identifier",
                            "src": "2045:9:58"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 7481,
                              "type": "bytes calldata",
                              "value": "data"
                            },
                            "id": 7490,
                            "name": "Identifier",
                            "src": "2055:4:58"
                          }
                        ],
                        "id": 7491,
                        "name": "FunctionCall",
                        "src": "2045:15:58"
                      }
                    ],
                    "id": 7492,
                    "name": "VariableDeclarationStatement",
                    "src": "2026:34:58"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        7494
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "pair",
                          "overrides": null,
                          "scope": 7522,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "contract IUniswapV3Pool",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "contractScope": null,
                              "name": "IUniswapV3Pool",
                              "referencedDeclaration": 2821,
                              "type": "contract IUniswapV3Pool"
                            },
                            "id": 7493,
                            "name": "UserDefinedTypeName",
                            "src": "2064:14:58"
                          }
                        ],
                        "id": 7494,
                        "name": "VariableDeclaration",
                        "src": "2064:19:58"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "contract IUniswapV3Pool",
                          "type_conversion": true
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2821,
                              "type": "type(contract IUniswapV3Pool)",
                              "value": "IUniswapV3Pool"
                            },
                            "id": 7495,
                            "name": "Identifier",
                            "src": "2086:14:58"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 7488,
                              "type": "address",
                              "value": "pairAddr"
                            },
                            "id": 7496,
                            "name": "Identifier",
                            "src": "2101:8:58"
                          }
                        ],
                        "id": 7497,
                        "name": "FunctionCall",
                        "src": "2086:24:58"
                      }
                    ],
                    "id": 7498,
                    "name": "VariableDeclarationStatement",
                    "src": "2064:46:58"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        7500
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "quoter",
                          "overrides": null,
                          "scope": 7522,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "contract IQuoterV2",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "contractScope": null,
                              "name": "IQuoterV2",
                              "referencedDeclaration": 2400,
                              "type": "contract IQuoterV2"
                            },
                            "id": 7499,
                            "name": "UserDefinedTypeName",
                            "src": "2469:9:58"
                          }
                        ],
                        "id": 7500,
                        "name": "VariableDeclaration",
                        "src": "2469:16:58"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "contract IQuoterV2",
                          "type_conversion": true
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2400,
                              "type": "type(contract IQuoterV2)",
                              "value": "IQuoterV2"
                            },
                            "id": 7501,
                            "name": "Identifier",
                            "src": "2488:9:58"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "307838323832356430353534664130376637464335324162363363393631463333306664454661384538",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "number",
                              "type": "address payable",
                              "value": "0x82825d0554fA07f7FC52Ab63c961F330fdEFa8E8"
                            },
                            "id": 7502,
                            "name": "Literal",
                            "src": "2498:42:58"
                          }
                        ],
                        "id": 7503,
                        "name": "FunctionCall",
                        "src": "2488:53:58"
                      }
                    ],
                    "id": 7504,
                    "name": "VariableDeclarationStatement",
                    "src": "2469:72:58"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "tuple()"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "type": "tuple(uint256,,,)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 7485,
                                  "type": "uint256",
                                  "value": "amountOut"
                                },
                                "id": 7505,
                                "name": "Identifier",
                                "src": "2546:9:58"
                              }
                            ],
                            "id": 7506,
                            "name": "TupleExpression",
                            "src": "2545:14:58"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "tuple(uint256,uint160,uint32,uint256)",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_struct$_QuoteExactInputSingleParams_$2360_memory_ptr",
                                      "typeString": "struct IQuoterV2.QuoteExactInputSingleParams memory"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "quoteExactInputSingle",
                                  "referencedDeclaration": 2374,
                                  "type": "function (struct IQuoterV2.QuoteExactInputSingleParams memory) external returns (uint256,uint160,uint32,uint256)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 7500,
                                      "type": "contract IQuoterV2",
                                      "value": "quoter"
                                    },
                                    "id": 7507,
                                    "name": "Identifier",
                                    "src": "2562:6:58"
                                  }
                                ],
                                "id": 7508,
                                "name": "MemberAccess",
                                "src": "2562:28:58"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": true,
                                  "lValueRequested": false,
                                  "names": [
                                    "tokenIn",
                                    "tokenOut",
                                    "fee",
                                    "amountIn",
                                    "sqrtPriceLimitX96"
                                  ],
                                  "tryCall": false,
                                  "type": "struct IQuoterV2.QuoteExactInputSingleParams memory",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        },
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        },
                                        {
                                          "typeIdentifier": "t_uint24",
                                          "typeString": "uint24"
                                        },
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        {
                                          "typeIdentifier": "t_rational_0_by_1",
                                          "typeString": "int_const 0"
                                        }
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "QuoteExactInputSingleParams",
                                      "referencedDeclaration": 2360,
                                      "type": "type(struct IQuoterV2.QuoteExactInputSingleParams storage pointer)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 2400,
                                          "type": "type(contract IQuoterV2)",
                                          "value": "IQuoterV2"
                                        },
                                        "id": 7509,
                                        "name": "Identifier",
                                        "src": "2591:9:58"
                                      }
                                    ],
                                    "id": 7510,
                                    "name": "MemberAccess",
                                    "src": "2591:37:58"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 7475,
                                      "type": "address",
                                      "value": "input"
                                    },
                                    "id": 7511,
                                    "name": "Identifier",
                                    "src": "2643:5:58"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 7477,
                                      "type": "address",
                                      "value": "output"
                                    },
                                    "id": 7512,
                                    "name": "Identifier",
                                    "src": "2663:6:58"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "arguments": [
                                        null
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "isStructConstructorCall": false,
                                      "lValueRequested": false,
                                      "names": [
                                        null
                                      ],
                                      "tryCall": false,
                                      "type": "uint24",
                                      "type_conversion": false
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": [
                                            null
                                          ],
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "member_name": "fee",
                                          "referencedDeclaration": 2944,
                                          "type": "function () view external returns (uint24)"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 7494,
                                              "type": "contract IUniswapV3Pool",
                                              "value": "pair"
                                            },
                                            "id": 7513,
                                            "name": "Identifier",
                                            "src": "2679:4:58"
                                          }
                                        ],
                                        "id": 7514,
                                        "name": "MemberAccess",
                                        "src": "2679:8:58"
                                      }
                                    ],
                                    "id": 7515,
                                    "name": "FunctionCall",
                                    "src": "2679:10:58"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 7479,
                                      "type": "uint256",
                                      "value": "amountIn"
                                    },
                                    "id": 7516,
                                    "name": "Identifier",
                                    "src": "2704:8:58"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "hexvalue": "30",
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "subdenomination": null,
                                      "token": "number",
                                      "type": "int_const 0",
                                      "value": "0"
                                    },
                                    "id": 7517,
                                    "name": "Literal",
                                    "src": "2736:1:58"
                                  }
                                ],
                                "id": 7518,
                                "name": "FunctionCall",
                                "src": "2591:148:58"
                              }
                            ],
                            "id": 7519,
                            "name": "FunctionCall",
                            "src": "2562:178:58"
                          }
                        ],
                        "id": 7520,
                        "name": "Assignment",
                        "src": "2545:195:58"
                      }
                    ],
                    "id": 7521,
                    "name": "ExpressionStatement",
                    "src": "2545:195:58"
                  }
                ],
                "id": 7522,
                "name": "Block",
                "src": "2022:722:58"
              }
            ],
            "id": 7523,
            "name": "FunctionDefinition",
            "src": "1870:874:58"
          },
          {
            "attributes": {
              "documentation": null,
              "functionSelector": "b9fdbb48",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "getPoolTicks",
              "overrides": null,
              "scope": 7559,
              "stateMutability": "view",
              "virtual": false,
              "visibility": "public"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "pool",
                      "overrides": null,
                      "scope": 7558,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "contract IUniswapV3Pool",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "contractScope": null,
                          "name": "IUniswapV3Pool",
                          "referencedDeclaration": 2821,
                          "type": "contract IUniswapV3Pool"
                        },
                        "id": 7524,
                        "name": "UserDefinedTypeName",
                        "src": "2769:14:58"
                      }
                    ],
                    "id": 7525,
                    "name": "VariableDeclaration",
                    "src": "2769:19:58"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "maxLoopN",
                      "overrides": null,
                      "scope": 7558,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "int16",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "int16",
                          "type": "int16"
                        },
                        "id": 7526,
                        "name": "ElementaryTypeName",
                        "src": "2790:5:58"
                      }
                    ],
                    "id": 7527,
                    "name": "VariableDeclaration",
                    "src": "2790:14:58"
                  }
                ],
                "id": 7528,
                "name": "ParameterList",
                "src": "2768:37:58"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "sqrtPriceX96",
                      "overrides": null,
                      "scope": 7558,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint160",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint160",
                          "type": "uint160"
                        },
                        "id": 7529,
                        "name": "ElementaryTypeName",
                        "src": "2837:7:58"
                      }
                    ],
                    "id": 7530,
                    "name": "VariableDeclaration",
                    "src": "2837:20:58"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "tick",
                      "overrides": null,
                      "scope": 7558,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "int24",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "int24",
                          "type": "int24"
                        },
                        "id": 7531,
                        "name": "ElementaryTypeName",
                        "src": "2862:5:58"
                      }
                    ],
                    "id": 7532,
                    "name": "VariableDeclaration",
                    "src": "2862:10:58"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "liquidity",
                      "overrides": null,
                      "scope": 7558,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint128",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint128",
                          "type": "uint128"
                        },
                        "id": 7533,
                        "name": "ElementaryTypeName",
                        "src": "2877:7:58"
                      }
                    ],
                    "id": 7534,
                    "name": "VariableDeclaration",
                    "src": "2877:17:58"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "populatedTicks0",
                      "overrides": null,
                      "scope": 7558,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "struct TickLens.PopulatedTick[]",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "length": null,
                          "type": "struct TickLens.PopulatedTick[]"
                        },
                        "children": [
                          {
                            "attributes": {
                              "contractScope": null,
                              "name": "TickLens.PopulatedTick",
                              "referencedDeclaration": 4377,
                              "type": "struct TickLens.PopulatedTick"
                            },
                            "id": 7535,
                            "name": "UserDefinedTypeName",
                            "src": "2899:22:58"
                          }
                        ],
                        "id": 7536,
                        "name": "ArrayTypeName",
                        "src": "2899:24:58"
                      }
                    ],
                    "id": 7537,
                    "name": "VariableDeclaration",
                    "src": "2899:47:58"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "populatedTicks1",
                      "overrides": null,
                      "scope": 7558,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "struct TickLens.PopulatedTick[]",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "length": null,
                          "type": "struct TickLens.PopulatedTick[]"
                        },
                        "children": [
                          {
                            "attributes": {
                              "contractScope": null,
                              "name": "TickLens.PopulatedTick",
                              "referencedDeclaration": 4377,
                              "type": "struct TickLens.PopulatedTick"
                            },
                            "id": 7538,
                            "name": "UserDefinedTypeName",
                            "src": "2951:22:58"
                          }
                        ],
                        "id": 7539,
                        "name": "ArrayTypeName",
                        "src": "2951:24:58"
                      }
                    ],
                    "id": 7540,
                    "name": "VariableDeclaration",
                    "src": "2951:47:58"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "populatedTicks2",
                      "overrides": null,
                      "scope": 7558,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "struct TickLens.PopulatedTick[]",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "length": null,
                          "type": "struct TickLens.PopulatedTick[]"
                        },
                        "children": [
                          {
                            "attributes": {
                              "contractScope": null,
                              "name": "TickLens.PopulatedTick",
                              "referencedDeclaration": 4377,
                              "type": "struct TickLens.PopulatedTick"
                            },
                            "id": 7541,
                            "name": "UserDefinedTypeName",
                            "src": "3003:22:58"
                          }
                        ],
                        "id": 7542,
                        "name": "ArrayTypeName",
                        "src": "3003:24:58"
                      }
                    ],
                    "id": 7543,
                    "name": "VariableDeclaration",
                    "src": "3003:47:58"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "populatedTicks3",
                      "overrides": null,
                      "scope": 7558,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "struct TickLens.PopulatedTick[]",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "length": null,
                          "type": "struct TickLens.PopulatedTick[]"
                        },
                        "children": [
                          {
                            "attributes": {
                              "contractScope": null,
                              "name": "TickLens.PopulatedTick",
                              "referencedDeclaration": 4377,
                              "type": "struct TickLens.PopulatedTick"
                            },
                            "id": 7544,
                            "name": "UserDefinedTypeName",
                            "src": "3055:22:58"
                          }
                        ],
                        "id": 7545,
                        "name": "ArrayTypeName",
                        "src": "3055:24:58"
                      }
                    ],
                    "id": 7546,
                    "name": "VariableDeclaration",
                    "src": "3055:47:58"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "populatedTicks4",
                      "overrides": null,
                      "scope": 7558,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "struct TickLens.PopulatedTick[]",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "length": null,
                          "type": "struct TickLens.PopulatedTick[]"
                        },
                        "children": [
                          {
                            "attributes": {
                              "contractScope": null,
                              "name": "TickLens.PopulatedTick",
                              "referencedDeclaration": 4377,
                              "type": "struct TickLens.PopulatedTick"
                            },
                            "id": 7547,
                            "name": "UserDefinedTypeName",
                            "src": "3107:22:58"
                          }
                        ],
                        "id": 7548,
                        "name": "ArrayTypeName",
                        "src": "3107:24:58"
                      }
                    ],
                    "id": 7549,
                    "name": "VariableDeclaration",
                    "src": "3107:47:58"
                  }
                ],
                "id": 7550,
                "name": "ParameterList",
                "src": "2832:326:58"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "functionReturnParameters": 7550
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple(uint160,int24,uint128,struct TickLens.PopulatedTick memory[] memory,struct TickLens.PopulatedTick memory[] memory,struct TickLens.PopulatedTick memory[] memory,struct TickLens.PopulatedTick memory[] memory,struct TickLens.PopulatedTick memory[] memory)",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_IUniswapV3Pool_$2821",
                                  "typeString": "contract IUniswapV3Pool"
                                },
                                {
                                  "typeIdentifier": "t_int16",
                                  "typeString": "int16"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "getPoolTicks",
                              "referencedDeclaration": 4530,
                              "type": "function (contract IUniswapV3Pool,int16) view returns (uint160,int24,uint128,struct TickLens.PopulatedTick memory[] memory,struct TickLens.PopulatedTick memory[] memory,struct TickLens.PopulatedTick memory[] memory,struct TickLens.PopulatedTick memory[] memory,struct TickLens.PopulatedTick memory[] memory)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4751,
                                  "type": "type(library TickLens)",
                                  "value": "TickLens"
                                },
                                "id": 7551,
                                "name": "Identifier",
                                "src": "3171:8:58"
                              }
                            ],
                            "id": 7552,
                            "name": "MemberAccess",
                            "src": "3171:21:58"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 7525,
                              "type": "contract IUniswapV3Pool",
                              "value": "pool"
                            },
                            "id": 7553,
                            "name": "Identifier",
                            "src": "3193:4:58"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 7527,
                              "type": "int16",
                              "value": "maxLoopN"
                            },
                            "id": 7554,
                            "name": "Identifier",
                            "src": "3199:8:58"
                          }
                        ],
                        "id": 7555,
                        "name": "FunctionCall",
                        "src": "3171:37:58"
                      }
                    ],
                    "id": 7556,
                    "name": "Return",
                    "src": "3164:44:58"
                  }
                ],
                "id": 7557,
                "name": "Block",
                "src": "3160:52:58"
              }
            ],
            "id": 7558,
            "name": "FunctionDefinition",
            "src": "2747:465:58"
          }
        ],
        "id": 7559,
        "name": "ContractDefinition",
        "src": "521:2693:58"
      }
    ],
    "id": 7560,
    "name": "SourceUnit",
    "src": "32:3182:58"
  },
  "compiler": {
    "name": "solc",
    "version": "0.6.8+commit.0bbfe453.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.4.16",
  "updatedAt": "2025-02-07T17:50:42.848Z",
  "devdoc": {
    "methods": {}
  },
  "userdoc": {
    "methods": {}
  }
}